7

У меня есть приложение для виджета, которое работает без проблем с Android Lollipop или более низкой ОС. Когда я обновил свою связь 5 в Marshmallow (android 6.0), я понимаю, что у моего виджета возникла проблема с загрузкой пользовательского списка строк. Виджет имеет динамический textView и динамический listView. textView отлично работает; но нет никакой надежды для элементов строки listView. Когда я добавляю виджет, строки застряли в фазе загрузки. Это точно такой же код работает на Lollipop или более низких устройствах, но не на Marshmallow. Я считаю, что Зефир вызывает проблему, которую я еще не смог найти. Я надеюсь, что кто-то покажет мне, что я делаю неправильно, и помогу решить эту проблему. Я ценю любую помощь. Благодарю.строки списка виджетов appwidget, не обновляющие или загружающие после обновления Marshmallow

WidgetProvider.class:

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     System.out.println("WidgetProvider.onUpdate()"); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     final boolean isMaviKart = MainUtils.getCardType(context).equals(Constants.CARD_TYPE_MAVI); 

     try { 
      //set widget id 
      ComponentName thisWidget = new ComponentName(context, WidgetProvider.class); 
      int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
      MainUtils.setWidgetID(prefs, allWidgetIds[allWidgetIds.length - 1]); 

      for (int i = 0; i < appWidgetIds.length; i++) { 
       Intent intentService = new Intent(context, WidgetService.class); 

       intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
       intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME))); 

       RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget); 
       widget.setRemoteAdapter(appWidgetIds[i], R.id.list_view, intentService); 

       Intent clickIntent = new Intent(context, MainActivity.class); 
       PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

       widget.setPendingIntentTemplate(R.id.list_view, clickPI); 

       if (isMaviKart) { 
        widget.setTextViewText(R.id.kalanPara, String.valueOf(MainUtils.getTokenPass(prefs))); 
        widget.setTextViewText(R.id.currency_tl, " Geçiş"); 
       } 
       else { 
        widget.setTextViewText(R.id.kalanPara, String.valueOf(MainUtils.getTotalMoney(prefs))); 
        widget.setTextViewText(R.id.currency_tl, " TL"); 
       } 

       appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(context, context.getResources().getString(R.string.error_occured), Toast.LENGTH_SHORT).show(); 
     } 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     System.out.println("WidgetProvider.onReceive()"); 

     String key = intent.getStringExtra(Constants.EXTRA); 
     if (key != null) 
      Log.e("TEST", key); 

    } 

WidgetViewsFactory.class:

@Override 
    public RemoteViews getViewAt(int position) { 

     Intent intent = new Intent(); 
     Bundle extras = new Bundle(); 

     rowButton = context.getResources().getIdentifier("widget_button","id", context.getPackageName()); 
     rowText = context.getResources().getIdentifier("widget_textview","id", context.getPackageName()); 

     RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.row); 

     // set BUTTON NAMES 
     row.setTextViewText(rowButton, getFeeTypes(position)); 


     // simple rows: 
     configureRowsInListview(row, position, context.getResources().getColor(R.color.DeepSkyBlue), View.VISIBLE); 




     extras.putString(Constants.EXTRA, getEventKey(position)); 
     intent.putExtras(extras); 
     row.setOnClickFillInIntent(rowButton, intent); 
     row.setOnClickFillInIntent(rowText, intent); 

     return row; 
    } 

WidgetService.class:

public class WidgetService extends RemoteViewsService { 
    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent) { 
     return(new WidgetViewsFactory(this.getApplicationContext())); 
    } 
} 

MainActivity.class: (KeyWord возврат на нуль Зефир)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    String keyWord = getIntent().getStringExtra(Constants.EXTRA); 
    if (keyWord == null) { 
     keyWord = "null"; 
     Log.e("onCreate() ", "No data Arrived yet!"); 
    } 
} 

private void updateWidgetScreen(String updateData, String currencyType) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
     RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget); 
     ComponentName thisWidget = new ComponentName(this, WidgetProvider.class); 
     remoteViews.setTextViewText(R.id.kalanPara, updateData); 
     remoteViews.setTextViewText(R.id.currency_tl, currencyType); 

     Intent intent = new Intent(this, WidgetService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, MainUtils.getWidgetID(prefs)); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs), R.id.list_view, intent); 

     Intent clickIntent = new Intent(this, MainActivity.class); 
     PendingIntent clickPI = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     remoteViews.setPendingIntentTemplate(R.id.list_view, clickPI); 
     appWidgetManager.updateAppWidget(thisWidget, remoteViews); 

     Log.e("updateWidgetScreen", updateData+" updateData - widgetid: "+ MainUtils.getWidgetID(prefs)); 
    } 

ListView проблема Row: enter image description here

+1

думал, что ссылка была на исходный код. SMH. слишком сложно исправить приложение Android без исходного кода. – napkinsterror

ответ

0

Я нашел ошибку я сделал. У меня был пользовательский список с кнопкой со стилем android:style/Widget.Material.Button. Когда я удалил стиль Button, он исправил мою проблему.

<Button 
      android:id="@+id/widget_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="Button" 
      android:layout_marginRight="10dp" 
      android:gravity="center" 
      android:padding="8dp" 
      android:textColor="@color/White" 
      **style="@style/MaterialButton"** 
      /> 

<style name="MaterialButton" parent="android:style/Widget.Material.Button"> 
     <item name="android:background">@drawable/raised_button_background</item> 
</style>