2011-11-30 24 views
1

首先我加載啓動活動A的應用程序,然後進入活動B,然後按我的主頁按鈕並加載Widget。點擊該插件的按鈕加載一個活動XXXX這是應用程序中的類,清除以前的部件活動

Intent searchDailog = new Intent(Intent.ACTION_MAIN) 
         .addCategory(Intent.CATEGORY_LAUNCHER) 
         .setComponent(new ComponentName("com.af.screenmanager", 
            "com.af.screenmanager.XXXX")); 

searchDailog.putExtra("ID", appWidgetIds); 
searchDailog.putExtra("View", remoteViews); 
searchDailog.setAction(ACTION_WIDGET_CONFIGURE); 

searchDailog.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

PendingIntent configPendingIntent = PendingIntent 
        .getActivity(context, 0, searchDailog, 
          PendingIntent.FLAG_UPDATE_CURRENT); 

remoteViews.setOnClickPendingIntent(R.id.widget_search_btn, 
        configPendingIntent); 

也能正常工作,即「XXXX」類負荷。

但問題是,從這裏,當我按下後退按鈕「XXXX」活動關閉並顯示活動B(屏幕從我按下主頁按鈕)。我不想查看它,而是必須轉到主屏幕。

我認爲加載的A和B活動存在於Activity堆棧中。那麼我怎麼能從小部件中清除堆棧。

回答

-1

最後我想出我的prblm。由於我的「XXXX」類Activity在同一個應用程序包中,因此它將加載到相同的應用程序堆棧中。即它將加載到以前的活動之上。

通過將

android:taskAffinity="af.searchActivity" 

在「XXXX」類的清單導致的活性在一個單獨的堆棧加載。

這個幫我。 http://developer.android.com/guide/topics/manifest/activity-element.html#aff

+0

我確實認爲這個解決方案過於複雜。只要學會有效地管理你的活動堆棧!你的情況不需要更多堆疊。 –

+0

我知道這很複雜。該應用程序工作正常。我做了大量的Google搜索,但是這個soln修復了我的查詢。 –

0

當你從另一個活動(即ActZ)推出一項新的活動(即ACT1),你不希望ActZ ACT1關閉時返回,只補充一點:你啓動ACT1

ActZ.finish(); 

後。

這樣,當ACT1結束(後退按鈕按下就是最好的例子),它被恢復活性不ActZ肯定的,但它被稱爲ActZ(如您的主屏幕)的一個

+0

在我的應用程序中,我想來回導航....所以不想完成。我想清除所有屏幕,當我從小部件 –

+0

完成()將關閉中間活動(在你的例子中),而不是你的應用程序。當你需要重新開始中間活動時,它會在你向前邁進時被重新創建和終止,所以當你返回1步時,你將會在你的主屏幕 –

+0

感謝你的建議..bt我已經解決了我的問題。 –

0

我面臨同樣的問題。當我點擊小部件中的按鈕時,它不會創建單個頁面。我的活動堆棧不是空的。

最後,我把這個單行放在manifest文件中的一個activity標籤中,然後它工作正常。

android:launchMode="singleInstance"