Ich habe eine Widget-App, die ohne Probleme funktioniert Android Lollipop oder niedriger OS. Als ich meinen Nexus 5 in Marshmallow (Android 6.0) hochstufte, merkte ich, dass mein Widget ein Problem beim Laden einer benutzerdefinierten Zeilenliste hat. Widget hat eine dynamische textView und eine dynamische listView. textView funktioniert perfekt; aber für listView-Zeilenelemente gibt es keine Hoffnung. Wenn ich das Widget hinzufüge, blieben die Zeilen in der Ladephase hängen. Es ist genau der gleiche Code funktioniert auf Lollipop oder niedrigeren Geräten, aber nicht auf Marshmallow. Ich glaube, Marshmallow verursacht ein Problem, das ich noch nicht finden konnte. Ich hoffe, dass mir jemand zeigt, was ich falsch mache und hilf mir, dieses Problem zu lösen. Ich bin dankbar für jede Art von Hilfe. Vielen Dank.appwidget listview rows nicht aktualisieren oder laden nach Marshmallow upgrade
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: (Schlüsselwort return null auf Eibisch)
@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));
}
dachte der Link war zum Quellcode. etw. zu schwer, um eine Android App ohne Originalcode zu reparieren. – napkinsterror