Kann ich eine Listview in einer Content-Ansicht der Benachrichtigung setzen? Wenn ja, wie kann ich es tun?Android - Listview in Benachrichtigung Inhalt Ansicht
In einer anderen App habe ich eine ListView in einem Widget, mit RemoteViews.setRemoteAdapter(), RemoteViewsService und RemoteViewsService.RemoteViewsFactory, die funktioniert.
Ich habe versucht, für eine Meldung, die gleiche Sache zu tun, aber es funktioniert nicht. Die App stürzt nicht ab, es gibt keinen Fehler im Protokoll, aber die ListView wird nicht angezeigt. Der RemoteViewsService wird nicht einmal aufgerufen.
Erstellen der Meldung:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
RemoteViews views = new RemoteViews(getPackageName(), R.layout.notification);
views.setRemoteAdapter(R.id.lvNotificationList, new Intent(this, ListService.class));
builder
.setSmallIcon(R.mipmap.ic_launcher)
.setOngoing(true)
.setContentTitle("Test")
.setContent(views)
.setCustomBigContentView(views)
.setCustomHeadsUpContentView(views)
.setCustomContentView(views);
Notification not = builder.build();
Mitteilung Layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My list should appear below this" />
<ListView
android:id="@+id/lvNotificationList"
android:layout_width="match_parent"
android:layout_height="100dp" />
ListService:
public class ListService extends RemoteViewsService {
private static final String TAG = "MyTag";
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
Log.d(TAG, "onGetViewFactory()");
return new ListProvider(getApplicationContext());
}
}
Erklärung ListService in manifest:
<service
android:name=".ListService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
ListProvider:
public class ListProvider implements RemoteViewsService.RemoteViewsFactory {
private static final String TAG = "MyTag";
private Context context;
public ListProvider(Context context) {
this.context = context;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return songs.size();
}
@Override
public RemoteViews getViewAt(int position) {
Log.d(TAG, "ListProvider.getViewAt(), position=" + position);
RemoteViews ret = new RemoteViews(context.getPackageName(), R.layout.row_notification_list);
...
return ret;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void onDataSetChanged() {
}
}
Die Textview über dem Listview angezeigt wird, aber die Liste bleibt leer ...
„Kann ich ein Listview in einer Mitteilung des Inhaltsansicht setzen“ Aber ist das wirklich einfach unmöglich? irgendwelche Ideen? –