Intereting Posts
Android: getSupportActionBar () всегда возвращает null в библиотеке ActionBarSherlock Как перемещать представление выше Закусочной, как FloatingButton Студия Android не выполняет рендеринг макета Динамическая загрузка ресурсов Android Как возобновить фрагмент из BackStack, если он существует К сожалению, MyApp остановился. Как я могу это решить? Файл APK не существует на диске Поймать салфетки, чтобы отклонить событие Как построить SQLite-запрос в GROUP с помощью ORDER? Возможно ли создать несколько PendingIntents с тем же кодом запроса и разными дополнительными функциями? Как запустить конкретное приложение для Android с помощью терминала? Как я могу оживить изменение цвета панели состояния и панели инструментов (как это делает новое приложение «Календарь») Удалить класс = атрибут Android: Где скрывается атрибут цвета текста виджета Spinner? Как получить значение EditText и отобразить его на экране через TextView?

Правильный способ обработки кнопки действий вверх?

Я использую ActionBarSherlock (хотя я не думаю, что это важно).

У меня есть основная деятельность и активность. Я хочу, чтобы функция «О деятельности» отображала обратную стрелку по ее логотипу и выполняла соответствующую анимацию. Я не знаю, как это сделать должным образом.

В настоящее время у меня есть onOptionsMenuItemSelected для запуска основного действия при нажатии кнопки Up / Home, но он взломан и не работает правильно. Он воспроизводит неправильную анимацию и плохо обрабатывает многозадачность.

Как мне настроить это правильно?

Вот часть моей основной деятельности, которая запускает About:

Intent aboutIntent = new Intent(MainActivity.this, About.class); MainActivity.this.startActivity(aboutIntent); 

Вот моя О деятельности:

 package com.stevenschoen.test; import android.content.Intent; import android.os.Bundle; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.MenuItem; public class About extends SherlockActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon in action bar clicked; go home Intent intentHome = new Intent(this, MainActivity.class); intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intentHome); return true; default: return super.onOptionsItemSelected(item); } } } 

Solutions Collecting From Web of "Правильный способ обработки кнопки действий вверх?"

Вы также пробовали это (взяты с сайта Android здесь ):

В манифесте, для каждого действия X, которое нужно перейти к основному действию, добавьте это в код:

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

И это к его манифестному тегу xml:

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

Если вам нужно все же иметь одно и то же состояние в основном действии, используйте этот код:

 Intent intent = NavUtils.getParentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); NavUtils.navigateUpTo(this, intent); 

Если API равен 16 или выше, вы можете добавить атрибут parentActivityName с указанием пути к основному действию вместо метаданных.

Я узнал, что корень моей проблемы – это изменение в манифесте, которое я сделал некоторое время назад: я добавил эту строку:

 android:launchMode="singleInstance" 

Поэтому моя основная деятельность не будет возобновлена. Изменение его на:

 android:launchMode="singleTask" 

Решил мои проблемы, и мне удалось удалить все onOptionsItemSelected . Я знал, что что-то не так, что Android должен был справиться с этим лучше, и я был прав. Проверьте манифест: P

В вашем onCreate(Bundle savedInstanceState) , сделайте

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

Затем в вашем onOptionsItemSelected(MenuItem item) , сделайте

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // go to previous screen when app icon in action bar is clicked Intent intent = new Intent(this, PreviousActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; } return super.onOptionsItemSelected(item); } 

Вы можете обращаться с кнопкой «Действие» с помощью кода или XML.

Проверить этот код

Если вы хотите это программно. Добавьте эту строку в метод onCreate ()

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

И переопределить этот метод onSupportNavigateUp ()

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

ИЛИ Непрограмматически вы можете добавить мета в файл манифеста, как

 <activity android:name="Current Activity" android:parentActivityName="Activity you want to open"> </activity> 

Примечание. Убедитесь, что панель действий не равна нулю.

Для тех, кто хочет просто вернуться в предыдущую деятельность, это самое простое решение:

 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); //this method close current activity and return to previous return true; } return super.onOptionsItemSelected(item); } 

Убедитесь, что ваш андроид: minSdkVersion = «11», который можно увидеть в файле манифеста, значок «Вверх» был добавлен из APK 11. Я сделал небольшой образец PLZ, попробуйте приведенную ниже ссылку, которая может помочь вам просто импортировать в рабочее пространство

http://www.mediafire.com/?hktdvts7yyduwv1