2015-02-02 2 views
5

위젯에서이 listview 응용 프로그램 아이콘을 원했기 때문에 remoteview의 도움으로 위젯에 동적 인 listview을 만들려고합니다. 애플리케이션별로 분리 된 모든 앱에서 들어오는 알림을 표시하고 싶습니다. 서 알림 목록을 만들고 싶습니다. 사용자가 listview에서 애플리케이션 아이콘을 클릭하면 해당 알림이 표시됩니다. 나는 모든 알림을 받기 위해 API 19을 사용하고 있지만 성공했으나 Remoteviewdrawables(Icons)을 사용하여 위젯에서 Listview을 어떻게 만들 수 있는지 알지 못합니다.remoteview를 사용하여 Listview를 만드는 방법은 무엇입니까?

+0

아직 코드를 작성 했습니까? – Apurva

+0

모두 ?? 많은 코드와 자바 파일을 시도했습니다 ... – kiturk3

+0

다른 유용한 답변이 있습니다 : http://www.stackoverflow.com/a/6093753/2180161 -이 하나를 이해하는 것이 더 쉬웠습니다 – maysi

답변

4

위젯에 ListView가있는 다른 예제를 검색하거나 사용해 보았습니까? github에서 사용할 수있는 Weather Widget demo을 확인하십시오.

코드 :

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

아래와 같이 동작합니다 :

enter image description here

GitHub의 프로젝트와 샘플 코드 위를 확인하시기 바랍니다.

+0

@ kiturk3 알려주세요 이 답변으로 귀하의 질문이 해결되지 않았거나 올바른 것으로 받아 들여 다른 사람도 그 사실을 알게되고 구현에 올바른 방향을 제시 할 수 있다면. 감사. –

+0

사실 나는 삼성 갤럭시 노트 가장자리 패널을 위해 이것을하고 싶었다. 나는 이미 다른 질문에서 너의 똑같은 질문을 읽었지 만 그것은 정확히 작동하지 않았다. 나는 여분의 것을 비틀 필요가 있었다. 그러나 그것은 도움이 확실했다. 고마워요 :) – kiturk3

+0

님께 서 cade 님의 답변으로 답변했습니다. listview가 주어졌으며 정확히 70 % 나 필요했습니다. 오직 onclickpendingintent 이벤트를 구현해야합니다. – kiturk3

1

나는 이전의 대답 중 하나에서 @iDroid Explorer의 솔루션을 사용해 보았습니다. 그러나 listview가 가장자리 패널에 나타나지 않았습니다 (PS : 나는 은하의 노트 가장자리 패널에 구현하고 싶었습니다).

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

을 그리고는 myService 클래스에서 나는 목록에서 필요한 항목을 채운 :

그래서 내가 코드를 아래에 노력했다.

나는 무작위 검색에서 발견 된 WidgetListView1이라는 예제를 통해 도움을 얻었습니다.