2015-02-10 33 views
2

我有MainActivitySecondActivity如何讓圖標的行爲與Android中的物理後退按鈕相同?

AndroidManifest.xml中

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" > 
<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<activity 
    android:name=".SecondActivity" 
    android:label="@string/title_activity_second_activitity" 
    android:parentActivityName=".MainActivity" > 
</activity> 

雖然我打的SecondActivity後退圖標,它更可能是MainActivitySecondActivity推。相反,物理後退按鈕將彈出SecondActivity並返回MainActivity

如何讓後退箭頭圖標的行爲與物理後退按鈕相同?

+0

你說的是動作條的後退按鈕? – Apurva 2015-02-10 18:05:26

+0

是的,Apurva。我正在討論操作欄的後退按鈕。 – willowcheng 2015-02-10 20:55:22

回答

9

根據谷歌的指導方針,物理後退按鈕和圖標後退按鈕不應該以相同的方式工作。但是,如果你想改變它的行爲,那麼你需要重寫它的功能做了下:

在您SecondActivity覆蓋onOptionsItemSelected

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     onBackPressed(); //Call the back button's method 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

你也需要從清單中刪除android:parentActivityName=".MainActivity"但要避免回圖標被刪除需要將其設置爲啓用:

@Override 
public boolean onCreate(Bundle savedInstanceState) { 

    ... 

    ActionBar actionBar = getActionBar(); //Make sure you are extending ActionBarActivity 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setHomeButtonEnabled(true); 

    //It's also possible to use getSupportActionBar() 
} 
+0

嗨,卡洛斯,我試過你的解決方案,但在這種情況下,如果我從我的清單中刪除'android:parentActivityName =「。MainActivity」',後面的圖標將消失。 – willowcheng 2015-02-10 17:53:10

+0

更新了我的回答 – 2015-02-10 17:58:40

+0

@CarlosJ,請您分享官方文檔或android開發人員博客的相關參考資料:「按照Google的指導原則,物理後退按鈕和圖標後退按鈕不應按照相同的方式工作」 – 2016-07-20 07:53:26

2

要實現此行爲,可以將MainActivity的launchMode定義爲singleTop活動。這是在你的清單easely完成加入以下行:

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" 
    android:launchMode="singleTop" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".SecondActivity" 
    android:label="@string/title_activity_second_activitity" 
    android:parentActivityName=".MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
</activity> 

如果你想支持API 15,下,我會建議將您的SecondActivity內的元數據元素爲好,因爲你可以在上面看到。

1

您需要添加3件事來定義您想要重新按下的活動,而不是將該活動推入堆棧並使後退按鈕與物理後退按鈕的行爲相同。

1.定義您按下back button時要進入的活動。

在你manifest文件的activity標籤包括

<activity 
     android:name=".SecondActivity" 
     android:parentActivityName=".MainActivity" > 
     <meta-data    //Use meta-data if you are using support library 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 

2.覆蓋onBackPressedSecondActivity.class文件中方法,以便當按下後退按鈕不推MainActivity到堆棧中。

@Override 
public void onBackPressed(){ 
    Intent i = new Intent(getApplicationContext(), MainActivity.class); 
    startActivity(i); 
    finish(); 
} 

使用showHomeAsUpEnabled()設置後退按鈕的動作條。

ActionBar().setDisplayHomeAsUpEnabled(true);getSupportActionBar().setDisplayHomeAsUpEnabled(true);如果您使用支持庫。

3

卡洛斯的答案有效。還有另一種我認爲更直接的方法:只需將點擊監聽器直接添加到後面的圖標即可。

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     finish(); 
     } 
    }); 
0
@Override 
    public void onBackPressed() { 
     int mCount = pager.getCurrentItem(); 

     if(mCount>0){ 
      pager.setCurrentItem(0,false); 
      firsticon.setBackgroundColor(Color.parseColor("#2B8C57")); 
      secondicon.setBackgroundColor(Color.TRANSPARENT); 
      thirdicon.setBackgroundColor(Color.TRANSPARENT); 
      fourthicon.setBackgroundColor(Color.TRANSPARENT); 
      fifthicon.setBackgroundColor(Color.TRANSPARENT); 

     }else{ 
      this.finish(); 
     } 

    } 
+0

這是用於從底部視圖中切換到其他選項卡上的第一個選項卡 – Soniya 2017-05-03 06:30:59

相關問題