2015-02-02 31 views
5

Bir widget içinde uygulama simgeleri bu listview istediği gibi listviewremoteview yardımı ile dinamik yapmaya çalışıyorum. Uygulama bilge ile ayrılmış tüm uygulamalardan gelen bildirimleri göstermek istiyorum. Ayakta bildirim listesi oluşturmak istiyorum ve kullanıcı liste simgesinden uygulama simgesini tıkladığında, söz konusu bildirim görüntülenecektir. Tüm bildirimleri almak ve başarılı olmak için API 19 kullanıyorum ama Remoteview ve drawables(Icons) ile widget'ta Listview nasıl oluşturabileceğimi bilmiyorum.Uzaktan görüntüleme yardımıyla Liste görünümü nasıl oluşturulur?

+0

Henüz herhangi bir kod yazdınız mı? – Apurva

+0

Herhangi bir ?? Bir çok kod ve java dosyaları denedim ... – kiturk3

+0

İşte bir başka yararlı cevap: http://www.stackoverflow.com/a/6093753/2180161 - bunu anlamak benim için daha kolay oldu – maysi

cevap

4

Widget'ta Widget'ı olan diğer örnekleri aramayı denediniz mi? Lütfen github'da bulunan Weather Widget demo numaralarını kontrol edin.

Kodu:

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); 
      ... 
     } 
    } 
} 

aşağıda gibi davranacaktır:

enter image description here

github proje ve örnek kod üzerinde kontrol edin.

+0

@ kiturk3 Lütfen bana bildirin Bu cevap sorunuza çözüm getirmezse ya da lütfen doğru olanı kabul edin, böylece diğerlerinin de bu konu hakkında bilgi sahibi olmaları ve uygulamalarına doğru yönelmeleri gerekir. Teşekkürler. –

+0

Aslında samsung galaxy not edge paneli için bunu yapmak istedim. Ben aynı soruyu başka bir soruda okumuştum ama bu tam olarak çalışmadı. Ekstra bir şey çimdik vardı ama emin oldu. Teşekkür ederim :) – kiturk3

+0

cade yardımıyla, cevap verdi bana listeview verir ve bu tam olarak% 70 ihtiyacım var. Sadece bunun üzerine onclickpendingintent olayı uygulamak zorundayım. – kiturk3

1

Daha önce @iDroid Explorer'in çözümünü önceki cevaplarından birinden denedim. Ancak liste görünümü kenar panelde görünmüyordu (PS: Bunu galaksi not kenarının panelinde uygulamak istedim).

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; 
    } 

Ve MyService sınıfında i listede gerekli öğeleri doldurulan adres:

Yani ben kod aşağıda çalıştı.

Rasgele aramalardan bulduğum bir örnek: WidgetListView1'den yardım aldım.

İlgili konular