2015-01-15 94 views
2

我有一個用下面的代碼後退按鈕和向上按鈕當父活動從廣播接收器

  Intent appIntent = new Intent(context, A.class); 
       appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_FROM_BACKGROUND); 
       context.startActivity(appIntent);  

的一個活動開始OK開始活動的廣播接收器開始不起作用,然後裏面我按下一個按鈕,使用此代碼

  TaskStackBuilder tsb = TaskStackBuilder.create(this); 
      tsb.addParentStack(this); 
      Intent intent=new Intent(this, B.class); 
      tsb.addNextIntent(intent); 
      tsb.startActivities();    

活動B開始精細啓動另一個活動B,但我按後退按鈕或向上按鈕活性的不露面

這裏是清單FIEL兩個活動的定義

<activity android:name=".A" android:launchMode="singleTop" 
     android:label="@string/app_name" > 
    </activity> 
    <activity android:name=".B" 
     android:label="@string/app_name" android:parentActivityName="myPackage.A"> 
     <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="myPackage.A" /> 
    </activity> 

,並在活動BI有以下代碼

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.simplelistlayout); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
    B.this.finish(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      Intent upIntent = NavUtils.getParentActivityIntent(this); 
      if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
       TaskStackBuilder.create(this) 
         .addNextIntentWithParentStack(upIntent) 
         .startActivities(); 
      } else { 
       NavUtils.navigateUpTo(this, upIntent); 
      } 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
}; 

我試圖調試,我認爲這個問題是,當我打電話活動A從廣播接收器中,FLAG_ACTIVITY_NEW_TASK導致意圖同時具有動作(android.intent.action.MAIN)和類別(android.intent.category.LAUNCHER),並且活動A不是我的啓動器活動,所以當活動B接收到後面動作或向上按鈕被按下I se e打算有正確的活動A,但與發射器活動的動作和類別有關,我該如何解決這個問題?

+0

你爲什麼要在這個複雜的方式開始從''A' B'?你爲什麼不用'Intent intent = new Intent(this,B.class)來啓動'B'; startActivity(intent);'?這也可能導致你的問題。 –

回答

0

如果按BACK在B,則執行該代碼:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
    B.this.finish(); 
} 

這會將任務的背景,這就是爲什麼你不會看到活動A.你爲什麼要這麼做?

+0

我現在改爲 @Override public void onBackPressed(){ finish(); } 但仍然是同樣的問題。 我認爲主要問題是活動A沒有Action Main或Category Launcher,但是當我調試應用程序時,我發現Up操作中的Intent既有Action又有Category。 –

+0

如果您按下後退按鈕或向上按鈕,則會出現相同的行爲。 –

+0

嗨,我發現很多鏈接提示,在豆形軟糖和以上的NavUtils.navigateUpTo存在問題,所以我用代碼替換它,代碼爲\t \t \t upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(upIntent); finish(); 它工作。 –

0

我改變主叫到活性的在我的廣播接收機

意圖appIntent =新意圖(上下文中,的A.class); appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(appIntent);

和調用活動B到

Intent intent=new Intent(this, B.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

,現在它正在