2015-02-02 8 views
5

Sto cercando di rendere dinamico il numero listview nel widget con l'aiuto di remoteview, poiché volevo questo listview di icone dell'applicazione in un widget. Voglio mostrare le notifiche in arrivo da tutte le app che sono separate dalle applicazioni. Voglio creare un elenco di notifiche permanenti e quando l'utente fa clic sull'icona dell'applicazione da listview, verrà visualizzata quella particolare notifica. Sto usando API 19 per ottenere tutte le notifiche e anche riuscito, ma non so come posso creare Listview nel widget con Remoteview e anche con drawables(Icons).Come creare Listview con l'aiuto di remoteview?

+0

Hai già fatto qualche codice? – Apurva

+0

Any ?? Un sacco di codice e file java che ho provato ... – kiturk3

+0

Ecco un'altra risposta utile: http://www.stackoverflow.com/a/6093753/2180161 - è stato più facile per me capire questo – maysi

risposta

4

Hai cercato o provato con altri esempi con ListView nel widget? Per favore controlla il Weather Widget demo disponibile su github.

Codice:

public class MyWidgetProvider extends AppWidgetProvider { 

    private static HandlerThread sWorkerThread; 
    private static Handler sWorkerQueue; 

    public MyWidgetProvider() { 
     // Start the worker thread 
     sWorkerThread = new HandlerThread("MyWidgetProvider-worker"); 
     sWorkerThread.start(); 
     sWorkerQueue = new Handler(sWorkerThread.getLooper()); 
    } 

    public void onUpdate(Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     for (int i = 0; i < appWidgetIds.length; ++i) { 
      ... 
      final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      views.setRemoteAdapter(R.id.lvWidget, svcIntent); 

      sWorkerQueue.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        views.setScrollPosition(R.id.list, 3); 
        appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views); 
       } 

      }, 1000); 

      appWidgetManager.updateAppWidget(appWidgetIds[i], views); 
      ... 
     } 
    } 
} 

Che si comporterà come di seguito:

enter image description here

Si prega di verificare il progetto github e soprattutto il codice di esempio.

+0

@ kiturk3 Per favore fatemi sapere se questa risposta non risolve la tua domanda o la accetti come giusta in modo che anche l'altro possa venire a conoscenza di ciò e avere la giusta direzione per la sua implementazione. Grazie. –

+0

In realtà volevo farlo per il pannello del bordo della nota Samsung Galaxy. Avevo già letto il tuo stesso nswer in un'altra domanda, ma non funzionava esattamente. Ho dovuto modificare qualcosa in più ma è stato sicuramente utile. Grazie :) – kiturk3

+0

con l'aiuto di cade ho risposto, mi dà listview e questo è esattamente il 70% di cui avevo bisogno. Devo solo implementare l'evento onclickpendingintent in questo. – kiturk3

1

Avevo già provato dalla soluzione di @iDroid Explorer da una delle sue precedenti risposte. Ma listview non veniva mostrato nel pannello laterale (PS: volevo che fosse implementato nel pannello di Galaxy Note Edge).

così ho cercato di seguito di codice:

private RemoteViews updateWidgetListView(Context arg0, int i) { 

     //which layout to show on widget 
     RemoteViews remoteViews = new RemoteViews(arg0.getPackageName(), 
       R.layout.activity_main_sub); 

     //RemoteViews Service needed to provide adapter for ListView 
     Log.d("fff", "updateWidget: "+ i); 

     Intent svcIntent = new Intent(arg0, MyService.class); 

     //passing app widget id to that RemoteViews Service 
     svcIntent.putExtra("Id", i); 
     Log.d("fff", "receiver:"+appnM); 
     svcIntent.putExtra("appname", appnM); 
     //setting a unique Uri to the intent 
     //don't know its purpose to me right now 
     svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME))); 
     //setting adapter to listview of the widget 

     remoteViews.setRemoteAdapter(i, R.id.list_icon,svcIntent); 

//  remoteViews.setRemoteAdapter(i, svcIntent); 

     arg0.startService(svcIntent); 
     //setting an empty view in case of no data 
     remoteViews.setEmptyView(R.id.list_icon, R.id.empty_view); 

     Log.d("fff","end of myReceiver"); 
     return remoteViews; 
    } 

E in classe myService ho popolato elementi richiesti in lista.

Ho ricevuto aiuto da un esempio chiamato: WidgetListView1, che ho trovato da ricerche casuali.

Problemi correlati