2017-02-27 1 views
0

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 ...

Antwort

0

Sieht aus wie ich sollte RTFM haben ... von https://developer.android.com/reference/android/widget/RemoteViews.html:

Leere setRemoteAdapter (int viewId, Intent Absicht)

Equival Entsprechende Aufrufe von setRemoteViewsAdapter (Intent). Kann nur für App-Widgets verwendet werden.

Also ich denke, die Antwort auf meine Frage ist keine ...

+0

„Kann ich ein Listview in einer Mitteilung des Inhaltsansicht setzen“ Aber ist das wirklich einfach unmöglich? irgendwelche Ideen? –

Verwandte Themen