Кнопка входа в панель действий Android

Я установил панель действий так, но ничего не происходит, когда я нажимаю кнопку «Домой вверх». Эти два параметра включены, поэтому не следует ли автоматически переходить к домашней активности?

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; } 

Solutions Collecting From Web of "Кнопка входа в панель действий Android"

Как говорили другие люди, поведение не происходит автоматически – вам нужно сказать, куда идти.

Тем не менее, мне нужно добавить еще один ответ, так как в текущих ответах все нарушаются принципы разработки Android – Back! = Home. См. Документацию

То, что вы действительно хотите сделать, – это нечто вроде этого:

 @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; } 

Добавьте эти строки в свой код:

 @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; }