コレクションを持つウィジェットを実装しています。ウィジェットは正常に動作していますが、ユーザーがコレクション内のアイテムをクリックすると、アプリを開いて、ウィジェットから へのパスと 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");
}
...
}
}