Ответ 1
Хорошо, это просто, чтобы показать кнопку
actionBar.setDisplayHomeAsUpEnabled(true);
а затем вы можете настроить обратное событие на onOptionsItemSelected
case android.R.id.home:
this.finish();
return true;
Я пытаюсь отобразить Back button
на Action bar
для перемещения предыдущей страницы/активности или на главную страницу (первое открытие).
И я не могу этого сделать.
мой код.
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
код находится в onCreate
.
Хорошо, это просто, чтобы показать кнопку
actionBar.setDisplayHomeAsUpEnabled(true);
а затем вы можете настроить обратное событие на onOptionsItemSelected
case android.R.id.home:
this.finish();
return true;
Я думаю, что onSupportNavigateUp()
- лучший и самый простой способ сделать это, проверьте следующие шаги. Шаг 1 необходим, шаг второй имеет альтернативу.
Шаг 1, показывающий кнопку "Назад". Добавьте эту строку в onCreate()
чтобы отобразить кнопку "Назад".
assert getSupportActionBar() != null; //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
Шаг 2 реализация обратного щелчка: переопределить этот метод
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
Вот и все, что вы сделали
ИЛИ Шаг 2 Альтернатива: Вы можете добавить мета к действию в файле манифеста как
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MainActivity" />
Изменить: Если вы не используете AppCompat
Activity, то не используйте слово support
, вы можете использовать
getActionBar().setDisplayHomeAsUpEnabled(true); // In 'OnCreate();'
// And override this method
@Override
public boolean onNavigateUp(){
finish();
return true;
}
Спасибо @atariguy за комментарий.
Магия происходит в onOptionsItemSelected
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Официальное решение
Добавьте эти два фрагмента кода в SubActivity
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
добавить метаданные и parentActivity в манифест для поддержки более низкого sdk.
<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.SubActivity"
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>
Ссылка здесь: http://developer.android.com/training/implementing-navigation/ancestral.html
Добавьте эти строки в onCreate()
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
и в onOptionItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//Write your logic here
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Надеюсь, это поможет вам..!
Попробуйте использовать этот код, считая его только если вам нужна кнопка "Назад".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//YOUR CODE
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//YOUR CODE
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
В вашем методе onCreate
добавьте:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Определяя в AndroidManifest.xml
родительскую активность (действие, которое будет вызываться после нажатия кнопки "Назад" на панели действий):
В определении <activity>
в манифесте добавьте строку:
android:parentActivityName="com.example.activities.MyParentActivity"
Я знаю, что немного опоздал, но смог исправить эту проблему, непосредственно следуя docs.
Добавьте тег метаданных в AndroidManifest.xml
(поэтому система знает)
<activity
android:name=".Sub"
android:label="Sub-Activity"
android:parentActivityName=".MainChooser"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainChooser" />
</activity>
Затем включите кнопку возврата (вверх) в MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
// my_child_toolbar is defined in the layout file
Toolbar myChildToolbar =
(Toolbar) findViewById(R.id.my_child_toolbar);
setSupportActionBar(myChildToolbar);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
}
И вы все настроитесь!
Источник: Документация разработчика для Android
Я знаю, что это много полезных решений, но на этот раз я прочитал эту статью (текущий Android Studio 2.1.2 с помощью sdk 23), какой-то метод выше не работает.
Ниже мое решение для суб-активности - MapsActivity
Во-первых, вам нужно добавить parentActivity в
AndroidManifest.xml
вот так:
<application ... >
...
<!-- Main activity (which has no parent activity) -->
<activity
android:name="com.example.myapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
.....
android:parentActivityName=".MainActivity" >
<!-- Support Parent activity for Android 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myapp.MainActivity" />
</activity>
</application>
Во-вторых, убедитесь, что ваша суб-активность расширяет AppCompatActivity
, а не
FragmentActivity.
В-третьих, переопределить onOptionsItemSelected()
метод
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon action bar is clicked; go to parent activity
this.finish();
return true;
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Надеюсь, это поможет!
Для этого есть всего два шага,
Шаг 1: перейдите к AndroidManifest.xml
и добавьте этот параметр в тег <activity>
- android:parentActivityName=".home.HomeActivity"
Пример:
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
Шаг 2: В ActivityDetail
добавьте action
для предыдущей страницы/действия
Пример:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
Это просто и работает для меня очень хорошо
добавить это внутри метода onCreate()
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
добавить это вне метода oncreate()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
Попробуйте это, В вашем onCreate()
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
И для clickevent,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; goto parent activity.
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
в методе onCreate write-
Toolbar toolbar = findViewById(R.id.tool);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
finish();
}
и это XML file-
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">
и в styles.xml измените его на
Theme.AppCompat.Light.NoActionBar
это все, что мы должны сделать.
Я решил таким образом
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed(){
Intent backMainTest = new Intent(this,MainTest.class);
startActivity(backMainTest);
finish();
}
мой рабочий код, чтобы вернуться к экрану.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(), "Home Clicked",
Toast.LENGTH_LONG).show();
// go to previous activity
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
public void initToolbar(){
//this set back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//this is set custom image to back button
getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}
//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
ActionBar actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
Может быть слишком поздно, чтобы ответить, но у меня есть более короткое и более функциональное решение по моему мнению.
// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
// After the method closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
В процессе создания(); напиши это line->
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
затем реализовать метод ниже в этом классе
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
manifest.xml
<activity
android:name=".Activity.SecondActivity"
android:label="Second Activity"
android:parentActivityName=".Activity.MainActivity"
android:screenOrientation="portrait"></activity>
Добавьте приведенный ниже код в функцию onCreate:
getSupportActionBar() setDisplayHomeAsUpEnabled (истина).
А затем переопределите: @Override public boolean onOptionsItemSelected (ItemItem item) {onBackPressed(); return true; вернуть истину; } }
В своем методе onCreate добавьте эту строку
setTitle("Your title");\\if you want to change
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
и добавьте этот метод в свою деятельность
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}