0

コレクションを持つウィジェットを実装しています。ウィジェットは正常に動作していますが、ユーザーがコレクション内のアイテムをクリックすると、アプリを開いて、ウィジェットから へのパスと ID を開き、Main activityユーザーを別の にリダイレクトしますactivity。これを行う理由は、Main最初にアクティビティを更新する必要があるためです (未読アイテムの数を表示します)。

私が持っているものは、ウィジェット コレクションのアイテムを初めてクリックしたときに機能します。ただし、ホーム ボタンを押して別の項目をクリックすると、アプリはBrowserアクティビティの最後の画面 (ユーザーが移動する 2 番目のアクティビティ) を表示するだけです。アプリを終了するか、[戻る] をクリックしてウィジェットに移動すると、期待どおりに動作します。この問題は、アプリを「最小化」し、2nd のままにしている場合にのみ発生しactivityます。

PendingIntentウィジェットサービスと関係があるかどうかはわかりません。

ウィジェットサービス

public class WidgetService extends RemoteViewsService {
    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {
        return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
    }
}

class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory  {

    private List<Integer> mIds = new ArrayList<Integer>();
    private Context mContext;
    private int mAppWidgetId;

    public StackRemoteViewsFactory(Context context, Intent intent) {
        mContext = context;
        mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    }

    public void onCreate() {
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return mIds.size();
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public RemoteViews getLoadingView() {
        // TODO Auto-generated method stub
        return null;
    }

    public RemoteViews getViewAt(int position) {
        RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);

        final Intent mi = new Intent(mContext, Main.class);

        final Bundle bun = new Bundle();
        bun.putInt("id", mIds.get(position));
        mi.putExtras(bun);

        final PendingIntent piMain = PendingIntent.getActivity(mContext, position, mi, PendingIntent.FLAG_UPDATE_CURRENT);

        rv.setOnClickPendingIntent(R.id.widget_text, piMain);
        rv.setTextViewText(R.id.widget_text, mIds.get(position));

        return rv;
    }

    public int getViewTypeCount() {
        // TODO Auto-generated method stub
        return 1;
    }

    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return true;
    }

    public void onDataSetChanged() {
        mIds = Utilities.GetIds(); //returns id's from a sqlite database
    }

    public void onDestroy() {
        // TODO Auto-generated method stub

    }
}

Main.class

public class Main extends SherlockFragmentActivity
{
    @Override
    public void onCreate(final Bundle icicle)
    {    
        super.onCreate(icicle);

        setContentView(R.layout.main);
    }

    public void onNewIntent(Intent intent){

        final Bundle extras = intent.getExtras();

        final Intent browser = new Intent(this, Browser.class);

        final Bundle bun = new Bundle();
        bun.putInt("id", extras.getInt("id"));
        browser.putExtras(bun);

        startActivity(browser);
    }
}

Browser.class

public class BrowserPager extends SherlockFragmentActivity
{
    private int mId = 0;

    @Override
    public void onCreate(final Bundle icicle)
    {    
        super.onCreate(icicle);

        setContentView(R.layout.browser_pager);

        final Bundle extras = getIntent().getExtras();

        if (extras != null)
        {
            mId = extras.getInt("id");
        }
        ...
    }
}
4

1 に答える 1