2016-05-24 8 views
0

私はそのアイテムの1つをクリックすると、自分のアプリの主なアクティビティを開始するコレクションウィジェットを実装しようとしています。なんらかの理由で、リストのビューはクリック可能です(私はそれを実行すると波及効果を見ます)が、意図は開始されていません。FillInIntent not firing

どこが間違っているのかを教えてもらえますか?

これはこれは、リモートビューを作成し、提供するクラスであるウィジェット

public class StockWidgetProvider extends AppWidgetProvider { 


    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

     for (int appWidgetId : appWidgetIds) { 

      RemoteViews views = initViews(context, appWidgetManager, appWidgetId); 

      Intent intent = new Intent(context, MyStocksActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      final PendingIntent pendingIntent = PendingIntent 
        .getActivity(context,0,intent,0); 
      views.setPendingIntentTemplate(R.id.widgetCollectionList,pendingIntent); 


      appWidgetManager.updateAppWidget(appWidgetId, views); 
     } 
     super.onUpdate(context,appWidgetManager,appWidgetIds); 
    } 

    private RemoteViews initViews(Context context, AppWidgetManager widgetManager, int widgetId) { 
     RemoteViews mView = new RemoteViews(context.getPackageName(), 
       R.layout.widget_layout); 

     Intent intent = new Intent(context, StockWidgetService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 

     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     mView.setRemoteAdapter(R.id.widgetCollectionList, intent); 

     return mView; 
    } 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
    } 
} 

の実装です:

public class WidgetDataProvider implements RemoteViewsService.RemoteViewsFactory { 

    List<String> mCollections = new ArrayList<>(); 

    Context mContext = null; 

    public WidgetDataProvider(Context mContext, Intent intent) { 
     this.mContext = mContext; 
    } 


    @Override 
    public int getCount() { 
     return mCollections.size(); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public RemoteViews getLoadingView() { 
     return null; 
    } 

    @Override 
    public RemoteViews getViewAt(int position) { 
     RemoteViews mView = new RemoteViews(
       mContext.getPackageName(), 
       android.R.layout.simple_list_item_1); 
     mView.setTextViewText(android.R.id.text1, mCollections.get(position)); 
     mView.setTextColor(android.R.id.text1, Color.BLACK); 

     final Intent fillInIntent = new Intent(mContext, MyStocksActivity.class); 
     fillInIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     mView.setOnClickFillInIntent(android.R.id.text1,fillInIntent); 

     return mView; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 1; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    @Override 
    public void onCreate() { 
     initData(); 
    } 

    @Override 
    public void onDataSetChanged() { 
     initData(); 
    } 

    @Override 
    public void onDestroy() { 

    } 

    private void initData() { 
     mCollections.clear(); 
     for (int i=0; i<10;i++) { 
      mCollections.add("Listview item" + i); 
     } 
    } 
} 

これは、ウィジェットのためのリモートビューを要求するサービスです。

public class StockWidgetService extends RemoteViewsService { 
    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent) { 
     return new WidgetDataProvider(getApplicationContext(),intent); 
    } 
} 

PS:マニフェストのすべてのコンポーネントを宣言しました。

答えて

-1

あなたは意図を作成しますが、あなたはそれを決して発射しません。

final Intent fillInIntent = new Intent(mContext, MyStocksActivity.class); 
fillInIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(fillInIntent); 

startActivity()は

もこのライン

mView.setOnClickFillInIntent(android.R.id.text1,fillInIntent); 

に慣れていないイムしかし、あなたがクリックリスナーを設定しようとしている場合は、startActivity(fillInIntentを呼び出す必要があります呼び出さなければなりません);そのリスナーの内側から

+0

基本的に、setOnClickFillInIntentは、クリックされたときに起動するビューのインテントを設定します。その行は、ビューがクリックされ、インテントが開始されたときのコールバックを作成する必要があります。 –