android-appwidget listview行在Marshmallow升级后没有更新或加载

前端之家收集整理的这篇文章主要介绍了android-appwidget listview行在Marshmallow升级后没有更新或加载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个小部件应用程序,没有问题 Android Lollipop或较低的操作系统.当我将nexus 5升级到Marshmallow(android 6.0)时,我意识到我的小部件在加载自定义行列表视图时遇到问题. Widget有一个动态textView和一个动态listView. textView工作得很好;但是listView行项目没有希望.当我添加小部件时,行处于加载阶段.它与Lollipop或更低版本的设备完全相同,但不适用于Marshmallow.我相信棉花糖正在引发一个我无法找到它的问题.我希望有人告诉我我做错了什么并帮助我解决这个问题.我很感激所有的帮助.谢谢.

WidgetProvider.class:

  1. @Override
  2. public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds) {
  3. System.out.println("WidgetProvider.onUpdate()");
  4.  
  5. SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
  6. final boolean isMaviKart = MainUtils.getCardType(context).equals(Constants.CARD_TYPE_MAVI);
  7.  
  8. try {
  9. //set widget id
  10. ComponentName thisWidget = new ComponentName(context,WidgetProvider.class);
  11. int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
  12. MainUtils.setWidgetID(prefs,allWidgetIds[allWidgetIds.length - 1]);
  13.  
  14. for (int i = 0; i < appWidgetIds.length; i++) {
  15. Intent intentService = new Intent(context,WidgetService.class);
  16.  
  17. intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[i]);
  18. intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME)));
  19.  
  20. RemoteViews widget = new RemoteViews(context.getPackageName(),R.layout.widget);
  21. widget.setRemoteAdapter(appWidgetIds[i],R.id.list_view,intentService);
  22.  
  23. Intent clickIntent = new Intent(context,MainActivity.class);
  24. PendingIntent clickPI = PendingIntent.getActivity(context,clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);
  25.  
  26. widget.setPendingIntentTemplate(R.id.list_view,clickPI);
  27.  
  28. if (isMaviKart) {
  29. widget.setTextViewText(R.id.kalanPara,String.valueOf(MainUtils.getTokenPass(prefs)));
  30. widget.setTextViewText(R.id.currency_tl," Geçiş");
  31. }
  32. else {
  33. widget.setTextViewText(R.id.kalanPara,String.valueOf(MainUtils.getTotalMoney(prefs)));
  34. widget.setTextViewText(R.id.currency_tl," TL");
  35. }
  36.  
  37. appWidgetManager.updateAppWidget(appWidgetIds[i],widget);
  38. }
  39. }
  40. catch (Exception e) {
  41. e.printStackTrace();
  42. Toast.makeText(context,context.getResources().getString(R.string.error_occured),Toast.LENGTH_SHORT).show();
  43. }
  44. super.onUpdate(context,appWidgetManager,appWidgetIds);
  45. }
  46.  
  47.  
  48. @Override
  49. public void onReceive(Context context,Intent intent) {
  50. super.onReceive(context,intent);
  51. System.out.println("WidgetProvider.onReceive()");
  52.  
  53. String key = intent.getStringExtra(Constants.EXTRA);
  54. if (key != null)
  55. Log.e("TEST",key);
  56.  
  57. }

WidgetViewsFactory.class:

  1. @Override
  2. public RemoteViews getViewAt(int position) {
  3.  
  4. Intent intent = new Intent();
  5. Bundle extras = new Bundle();
  6.  
  7. rowButton = context.getResources().getIdentifier("widget_button","id",context.getPackageName());
  8. rowText = context.getResources().getIdentifier("widget_textview",context.getPackageName());
  9.  
  10. RemoteViews row = new RemoteViews(context.getPackageName(),R.layout.row);
  11.  
  12. // set BUTTON NAMES
  13. row.setTextViewText(rowButton,getFeeTypes(position));
  14.  
  15.  
  16. // simple rows:
  17. configureRowsInListview(row,position,context.getResources().getColor(R.color.DeepSkyBlue),View.VISIBLE);
  18.  
  19.  
  20.  
  21.  
  22. extras.putString(Constants.EXTRA,getEventKey(position));
  23. intent.putExtras(extras);
  24. row.setOnClickFillInIntent(rowButton,intent);
  25. row.setOnClickFillInIntent(rowText,intent);
  26.  
  27. return row;
  28. }

WidgetService.class:

  1. public class WidgetService extends RemoteViewsService {
  2. @Override
  3. public RemoteViewsFactory onGetViewFactory(Intent intent) {
  4. return(new WidgetViewsFactory(this.getApplicationContext()));
  5. }
  6. }

MainActivity.class :(关键字在Marshmallow上返回null)

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. prefs = PreferenceManager.getDefaultSharedPreferences(this);
  6.  
  7. String keyWord = getIntent().getStringExtra(Constants.EXTRA);
  8. if (keyWord == null) {
  9. keyWord = "null";
  10. Log.e("onCreate() ","No data Arrived yet!");
  11. }
  12. }
  13.  
  14. private void updateWidgetScreen(String updateData,String currencyType) {
  15.  
  16. AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
  17. RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.widget);
  18. ComponentName thisWidget = new ComponentName(this,WidgetProvider.class);
  19. remoteViews.setTextViewText(R.id.kalanPara,updateData);
  20. remoteViews.setTextViewText(R.id.currency_tl,currencyType);
  21.  
  22. Intent intent = new Intent(this,WidgetService.class);
  23. intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,MainUtils.getWidgetID(prefs));
  24. intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
  25. remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs),intent);
  26.  
  27. Intent clickIntent = new Intent(this,MainActivity.class);
  28. PendingIntent clickPI = PendingIntent.getActivity(this,PendingIntent.FLAG_UPDATE_CURRENT);
  29.  
  30. remoteViews.setPendingIntentTemplate(R.id.list_view,clickPI);
  31. appWidgetManager.updateAppWidget(thisWidget,remoteViews);
  32.  
  33. Log.e("updateWidgetScreen",updateData+" updateData - widgetid: "+ MainUtils.getWidgetID(prefs));
  34. }

ListView行问题:

解决方法

我发现了我犯的错误.我有一个带有按钮的自定义列表视图,其中包含样式android:style / Widget.Material.Button.当我删除Button的样式时,它解决了我的问题.
  1. <Button
  2. android:id="@+id/widget_button"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layout_gravity="center"
  6. android:text="Button"
  7. android:layout_marginRight="10dp"
  8. android:gravity="center"
  9. android:padding="8dp"
  10. android:textColor="@color/White"
  11. **style="@style/MaterialButton"**
  12. />
  13.  
  14. <style name="MaterialButton" parent="android:style/Widget.Material.Button">
  15. <item name="android:background">@drawable/raised_button_background</item>
  16. </style>

猜你在找的Android相关文章