2014-09-19 76 views
0

我有一個包含ListView佈局的App Widget。當我點擊項目列表時,活動已打開,但如果按Home按鈕並單擊其他項目列表,則後臺活動將再次打開。我希望每個項目列表打開一個新的活動並關閉其他活動(如果已經存在)。如何在App Widget上的每個項目列表中開始新活動

WidgetProvider.class

 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
       R.layout.widgetnews); 

     remoteViews.setImageViewBitmap(R.id.widgetTitle, buildUpdate("TITLE")); 

     // Intent to item List 
     Intent intentActivity; 
     if(context.getResources().getBoolean(R.bool.tablet_full)) 
      intentActivity = new Intent(context, MainTabletFull.class); 
     else 
      intentActivity = new Intent(context, MainSmartphone.class); 
     intentActivity.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 
     intentActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intentActivity.setData(Uri.parse(intentActivity.toUri(Intent.URI_INTENT_SCHEME))); 
     intentActivity.addCategory(Intent.CATEGORY_HOME); 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentActivity, 0); 
     remoteViews.setOnClickPendingIntent(R.id.widgetlogo, pendingIntent); 
     remoteViews.setPendingIntentTemplate(R.id.widgetlist, pendingIntent); 


     // Intent to Widget Logo 
     Intent intent = new Intent(context, WidgetService.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     remoteViews.setRemoteAdapter(R.id.widgetlist, intent); 

     appWidgetManager.updateAppWidget(widgetId, remoteViews); 

WidgetRemoteViewsFactory

@Override 
public RemoteViews getViewAt(int position) 
{ 
    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_noticias_row); 

    remoteView.setTextViewText(R.id.wnr_date, "DATE"); 
    remoteView.setTextViewText(R.id.wnr_title, "TITLE"); 

    if(artigo.getId()!=null) 
    { 
     Intent intentActivity = new Intent(); 
     intentActivity.putExtra("ID_NOTIF", "ID"); 
     intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     remoteView.setOnClickFillInIntent(R.id.wnr_layout, intentActivity); 
    } 

    return remoteView; 
} 

回答

1

也許你找......

intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); // or intent.setFlags 

android:noHistory="true" 

「無論是否活動應該從活動組中刪除,並完成(其完成()調用的方法),當用戶導航遠離它,它不再顯示在屏幕上」 - >http://developer.android.com/guide/topics/manifest/activity-element.html#nohist

或者可能的工作方式是在活動離開時直接調用finish()。

另見: Clear the entire history stack and start a new activity on Android

Android: Remove all the previous activities from the back stack

http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

我也看不到你做的一切,但你以某種方式開始新的任務等FLAG_ACTIVITY_CLEAR_TASK & FLAG_ACTIVITY_NEW_TASK可能是也可能不是毫無意義的。在後臺堆棧上可能有多個任務不會被清除。因此,您可能需要查看清單中的所有活動以及代碼中的所有意圖。

如果你對重新打開相同的活動,並刷新它說話,可以採用上述的東西,

intent = getIntent(); 
finish(); 
startActivity(intent); 

Android refresh current activity

+0

謝謝,我添加intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);和結果。謝謝。 – nss 2014-09-22 11:44:15

1

我覺得你在做這個複雜得多,你需要做的工作還有。只需刪除所有以下內容:

intentActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intentActivity.setData(Uri.parse(intentActivity.toUri(Intent.URI_INTENT_SCHEME))); 
    intentActivity.addCategory(Intent.CATEGORY_HOME); 
+0

謝謝。這條線並不重要。我添加intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);和結果 – nss 2014-09-22 11:43:12