Android的 - 在标题栏后退按钮(Android - Back button in the t

2019-07-18 18:34发布

在许多应用程序(日历,云端硬盘,Play商店),当你点击一个按钮,然后输入一个新的活动,在标题栏中的图标变为一个返回按钮,而是我做的应用程序,它没有做到这一点。 如何使该图标带你回到以前的屏幕?

Answer 1:

有两个简单的步骤来创建标题栏后退按钮:

首先,你想有一个返回按钮,其标题栏中的活动使用下面的代码使应用程序的图标点击:

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

在您添加了上面的代码,你会看到一个向后的箭头出现在应用程序图标的左侧。

其次,你做了上面后,你还必须创建代码,将采取click事件的优势。 要做到这一点,要知道,当你真正点击应用程序图标, onOptionsItemSelected方法被调用。 所以,回到以前的活动中,该方法添加到您的活动,并把Intent在它的代码,将返回到以前的活动。 例如,假设该活动你想回去MyActivity 。 回去吧,写的方法如下:

public boolean onOptionsItemSelected(MenuItem item){
    Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
    startActivityForResult(myIntent, 0);
    return true;
}

而已!

(在Android开发者API,它建议使用类似清单,并添加东西乱搞android:parentActivityName ,但这似乎并没有对我的工作上面更简单,更可靠。)

<meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value=".MainActivity" />

而在你的活动

getSupportActionBar().setDisplayHomeAsUpEnabled(true);


Answer 2:

使用此代码

 @Override
 public void onCreate(Bundle savedInstanceState) {
    ...
   getActionBar().setDisplayHomeAsUpEnabled(true);
 } 

之后写在此代码onOptionsItemSelected方法

  int id = item.getItemId();

     if (id==android.R.id.home) {
        finish();
    }


Answer 3:

我终于设法适当加后退按钮动作条/工具栏

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}  

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

    return super.onOptionsItemSelected(item);
}

public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}


Answer 4:

1.-活动添加到AndroidManifest.xml中,并确保提供的元数据:

<activity
    android:name="com.example.myfirstapp.DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />
</activity>

2:下列代码添加到活动的onCreate方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
} 

3.-重写onOptionsItemSelected并使用NavUtils.navigateUpFromSameTask()静态方法来导航扔堆栈。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

但是,使用navigateUpFromSameTask()是合适的,只有当你的应用是当前任务的所有者(即,用户开始从您的应用程序这个任务)。 如果这是不正确的,你的活动在属于不同的应用任务开始,然后向上导航应该创造出属于你的应用程序,这需要您创建一个新的后台堆栈一个新的任务。



Answer 5:

如果您的活动确实扩展了活动

public class YourActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxx);

        getActionBar().setHomeButtonEnabled(true);

        [...]
    }

    [...]
}

如果你的行动延伸AppCompatActivity

public class YourActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_xxx);

            getSupportActionBar().setHomeButtonEnabled(true);

            [...]
        }

        [...]
    }

无事可做 ,请参阅添加后续行动

[可选]要明确定义父活动修改您的Manifest.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.YourActivity "
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

请参阅指定父活动



Answer 6:

作为谷歌最简单的方法和最佳实践说明在这里 :

1.增加在您的childActivity父AndroidManifest.xml

<activity 
        android:name=".ChildActivity"
        android:parentActivityName=".ParentActivity" >
</activity>

2.Activate在childActivity后退按钮:

myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);

工作对我来说,我希望它为你的作品了。



Answer 7:

首先在功能的onCreate中添加以下行

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后添加下面的函数中的代码:

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

        return super.onOptionsItemSelected(item);
    }


Answer 8:

如果您在Android Studio中使用新的支持库5.1,你可以使用它代替您AppCompatActivity

 ActionBar actionBar = getSupportActionBar();
 actionBar.setHomeButtonEnabled(true);
 actionBar.setDisplayHomeAsUpEnabled(true);
 actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
 actionBar.setDisplayShowHomeEnabled(true);

干杯。



Answer 9:

如果你的活动来延长AppCompatActivity你需要重写onSupportNavigateUp()方法如下所示:

public class SecondActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_second);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       ...
   }

   @Override
   public void onBackPressed() {
       super.onBackPressed();
       this.finish();
   }

   @Override
   public boolean onSupportNavigateUp() {
       onBackPressed();
       return true;
   }
}

处理你的逻辑在你的onBackPressed()方法,只是调用该方法onSupportNavigateUp()工具栏上所以手机上的后退按钮和箭头做同样的事情。



Answer 10:

首先,你需要写代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

然后在清单中加入这一行

 <activity android:name=".MainActivity"
            android:parentActivityName=".PreviousActivity"></activity>

我认为它会工作



Answer 11:

轻量化版本,而不使用ActionBarActivity仍然在这里具有相同的bahaviors:

public class ToolbarConfigurer implements View.OnClickListener {
    private Activity activity;

    public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
        toolbar.setTitle((this.activity = activity).getTitle());
        if (!displayHomeAsUpEnabled) return;
        toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        toolbar.setNavigationOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        NavUtils.navigateUpFromSameTask(activity);
    }
}

使用方法:将new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);onCreate



Answer 12:

如果您使用的是动作条,你会想对这个文件阅读起来http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)

然后,你必须覆盖方法onOptionsItemSelected(菜单项),并查找android.R.id.home事件进来,然后你知道用户点击了后退按钮的动作条



Answer 13:

您需要在清单文件中添加以下代码提及。 搜索要在其中添加的后退箭头的功能活动。 如果你找到了,再细或创建活动

<activity android:name=".SearchActivity">

</activity>

然后添加以下三行代码之间。

<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.raqib.instadate.MainActivity" />

而且不要忘了添加这段代码中的onCreate(); 您的特定活动的方法中,你需要后退箭头。

        Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
    setSupportActionBar(toolbar);
    try{
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }catch(NullPointerException e){
       Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
    }

这是我如何解决了这个问题。 谢谢。



Answer 14:

我需要把一些答案,找到正确答案,对我来说,因为我的应用程序有3个活动,可以去随时回来。 活动1>活性2> Activity3。 当我在我的activity3做一些事情,后退按钮是正确的后盾,以活性2。 然而,从活性2,使用finish()将其向备份和Activity3不活性1。 而且我伸出AppCompatActivity。 所以,我的解决办法是:

public class Activity2 extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...

            getSupportActionBar().setHomeButtonEnabled(true);
        }
    }

在AndroidManifest.xml中:

<activity android:name=".activities.Activity2"
           android:parentActivityName="com.example.appname.activities.Activity1">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.appname.activities.Activity1" />
        </activity>

终于,我的菜单(动作条)上的操作按钮:

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            ...

            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;

        }

        return super.onOptionsItemSelected(item);

    }

使用NavUtils.navigateUpFromSameTask(this); 为我工作,而不是finish()



Answer 15:

你也可以简单地把onBackPressed()在你的onClick监听器。 这将导致你的按钮,像默认的“返回/向上”按钮,在Android应用!



Answer 16:

它也可以不用代码通过指定应用程序清单父活动。如果你想在活动B返回按钮将转到活动A,只需添加一个活动作为活动B的清单中的父母来完成。



Answer 17:

Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (getSupportActionBar()==null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home)
    finish();
return super.onOptionsItemSelected(item);
}


Answer 18:

这是为我工作..假设有两个活动(Activityone,Activitytwo)

里面Activitytwo使用此代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

在Activityone

//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));

这应该包括在清单文件中第二个活动

<activity android:name=".Activitytwo"
        android:parentActivityName=".Activityone"></activity>

其结果将是这样



Answer 19:

对于科特林:

   override fun onOptionsItemSelected(item: MenuItem): Boolean {
        onBackPressed();
        return true;
    }


Answer 20:

其他的答案不提,你也可以设置这个在您的XML Toolbar小工具:

app:navigationIcon="?attr/homeAsUpIndicator"

例如:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:navigationIcon="?attr/homeAsUpIndicator"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    app:title="@string/title_activity_acoustic_progress" />


Answer 21:

这是为我工作getSupportActionBar()setDisplayHomeAsUpEnabled(假)。 在这里输入图像描述



文章来源: Android - Back button in the title bar