2013-09-03 1 views
0

내가 클릭 한 현재 Item의 수를 얻을 수있는 방법 ListViewListView에 항목 ID의 홈 화면 위젯

와의 홈 화면 widget 있습니다 '인사이트 사용자 정의 클래스 AppWidgetProvider를 확장 : 나는 다음과 같은 방법으로 그것을 할 것을 시도했다 을

public void onUpdate(Context ctxt, AppWidgetManager mgr, 
         int[] appWidgetIds) { 
     for (int i=0; i<appWidgetIds.length; i++) { 
      Intent svcIntent=new Intent(ctxt, WidgetService.class); 

      svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
      svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME))); 

      RemoteViews widget=new RemoteViews(ctxt.getPackageName(), 
        R.layout.widget); 

      widget.setRemoteAdapter(appWidgetIds[i], R.id.contacts, 
        svcIntent); 

      Intent clickIntent=new Intent(ctxt, AppWidget.class); 


      clickIntent.setAction(ACTION_WIDGET_REFRESH); 
      clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds[i]); 

      PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      widget.setPendingIntentTemplate(R.id.contacts, pi); 
      mgr.updateAppWidget(appWidgetIds[i], widget); 
     } 
     super.onUpdate(ctxt, mgr, appWidgetIds); 
    } 

@Override 
     public void onReceive(Context context, Intent intent) { 
     Log.i("gotcha","receive"); 


     if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) { 

      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      Bundle extras = intent.getExtras(); 
      int extrass= -1; 
      if(extras!=null) { 
       extrass = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_IDS); 
      } 

      Log.i("receive", Integer.toString(extrass)) ; // Here is I've expected to see Item ID 

     } 

하지만 도움이되지 않습니다. 방금 다른 번호를 보았습니다 (아이템 ID는 아님)

어떻게 얻을 수 있습니까? 당신은 항상 requestCode 0을 주면 때문에

답변

3

문제는

PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0 , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

, 그리고 플래그는 모든 목록 항목은 업데이트가 지속하는 것입니다 같은 PendingIntent를 참조 FLAG_UPDATE_CURRENT입니다.

그러니이 문제를 해결합니다 PendingIntent에 다른 requestCode가 줄 대신

PendingIntent pi=PendingIntent.getBroadcast(ctxt, appWidgetIds[i] , clickIntent, PendingIntent.FLAG_UPDATE_CURRENT)` 

을 사용하십시오. 또한 그런 다음 당신이 appwidget 아이디뿐만 아니라 목록 항목의 위치를 ​​검색 할 수 adapter.getViewAt()

RemoteViews rv = new RemoteViews(pkg, R.layout.item); 
    Intent i = new Intent().putExtra("position", position); 
    rv.setOnClickFillInIntent(R.id.item, i); 

에 리모트 뷰에 OnClickFillIntent을 설정합니다.

+0

아직 도움이 안된다. 첫 번째 이후에 똑같은 ID를 얻었습니다. – Arseniy

+0

appWidgetId 또는 목록 항목 ID를 원하십니까? – Isaiah

+0

@Pepelac 목록 항목 ID를 가져 오려면 다음을 사용하십시오. RemoteViews rv = new RemoteViews (pkg, R.layout.item); 의도 i = 새로운 의도(). putExtra ("위치", 위치); rv.setOnClickFillInIntent (R.id.item, i); – Isaiah

0

난 당신이 우리가 무엇을해야 얻을 생각 일단 읽기

컬렉션을 사용하는 경우 (예. 목록보기, StackView 등) 위젯에서, 개별 항목에 PendingIntents을 설정하는 것은 매우 비용이 많이 들고, 따라서 아닙니다 허용. 대신이 메소드는 컬렉션에 단일 PendingIntent 템플릿을 설정하는 데 사용해야하며 개별 항목은 setOnClickFillInIntent (int, Intent)를 사용하여 클릭 할 때의 비헤이비어를 구분할 수 있습니다.