簡體   English   中英

Android操作欄主頁按鈕

[英]Android action bar home button

我已經設置了我的操作欄,但是當我點擊主頁按鈕時沒有任何反應。 以下兩個選項已啟用,因此不應自動轉到主頁活動?

ab.setHomeButtonEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);

行動吧

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    final String[] activities;
    Resources res = getResources();
    activities =  res.getStringArray(R.array.activities);

    ActionBar ab = getActionBar();
    ab.setHomeButtonEnabled(true);
    ab.setDisplayHomeAsUpEnabled(true);
    ab.setTitle(R.string.app_name);
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    ab.show();

    /** Create an array adapter to populate dropdownlist */
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, activities);

    /** Setting dropdown items and item navigation listener for the actionbar */
    getActionBar().setListNavigationCallbacks(adapter, navigationListener);

    /** Enabling dropdown list navigation for the action bar */
    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    return true;
}

正如其他人所說,這種行為不是自動發生的 - 你需要告訴它去哪里。

但是,我需要添加另一種答案,因為目前的答案打破Android的設計指南! -返回=家庭。 請參閱文檔

你真正想要做的是這樣的事情:

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case android.R.id.home:
            Intent homeIntent = new Intent(this, HomeActivity.class);
            homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(homeIntent);
    }
    return (super.onOptionsItemSelected(menuItem));
}

這將帶您進入父活動,而不僅僅是通過后台堆棧。 我還添加了Intent.Flag以清除后台堆棧,當你進入家庭活動時它是一個很有用的,並且當你的用戶使用“向上”按鈕時可以阻止后台陷入困境

您還需要確保您的應用程序在按下時知道該怎么做:

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
    case android.R.id.home:
      // ProjectsActivity is my 'home' activity
      super. onBackPressed();
      return true;
    }
  return (super.onOptionsItemSelected(menuItem));
}

我們必須按照官方文檔中的規定將元數據定義到AndroidManifast.xml文件中的子活動:

<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
    android:name="com.example.myfirstapp.MainActivity" ...>
    ...
</activity>
<!-- A child of the main activity -->
<activity
    android:name="com.example.myfirstapp.DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- The meta-data element is needed for versions lower than 4.1 -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />
</activity>

如果版本為4.1或更高版本,則無需定義元數據,您必須像在代碼中一樣啟用操作欄主頁按鈕。 無需使用后退按鈕代碼,它與我的Android應用程序正常工作: Helper +

你需要定義這里發生的事情:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case android.R.id.home:
        onBackPressed();
    }
    return true;
}

您可以使用以下方法實現此目的,盡管有很多方法可以實現。

把這一行放在你的onCreate

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

在您的活動中覆蓋onSupportNavigateUp方法

@Override
public boolean onSupportNavigateUp() {
    finish();
    return super.onSupportNavigateUp();
}

在代碼中添加以下行:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:
        System.out.println("Pressed Back Button");
        break;

    default:
        return super.onOptionsItemSelected(item);
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM