Intereting Posts
Как сделать список <enum> возможным? Тест эспрессо завершился неудачно после успешного нажатия и блокировки в течение 60 секунд Обновление сервисов Google Play Получить json из HttpResponse Как работать с двумя учетными записями в одном приложении Android получит текущую дату и покажет ее в TextView Android-переключатели пользовательских левых правых чертежей Запуск эмулятора Android на компьютере с процессором AMD Как изменить задержку потока сна / таймера в android во время выполнения? Как получить мой Android-устройство Внутренний путь к папке Загрузка Этот идентификатор клиента глобально уникален и уже используется Могу ли я заставить пользователя согласиться с юридической оговоркой перед установкой приложения для Android? Как получить элементы, отображаемые в AdapterView? После обновления APK поддерживает меньше устройств, чем ранее Как для всех, как правильно сохранить состояние экземпляров фрагментов в стеке?

Переход к родительской активности в ActionBar без обработки.

У меня есть два действия, которые я хочу, чтобы эта навигация произошла, это VendorsActivity и QuestionsActivity. Следующее, как выглядит мой AndroidManifest.xml:

(Я не использую полное имя моих действий, таких как com.hello.world.MyActivity поскольку я определил атрибут package в узле manifest .)

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".VendorsActivity" android:label="@string/vendors_activity_title" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TestsActivity" android:label="@string/tests_activity_title" android:parentActivityName=".VendorsActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".VendorsActivity" /> </activity> <activity android:name=".QuestionsActivity" android:label="@string/questions_activity_title" > </activity> </application> 

И в TestsActivity я getActionBar().setDisplayHomeAsUpEnabled(true); Способ из внутри onCreate метод.

Проблема в том, что это не сработает, если я не применяю следующий метод в классе .TestsActivity :

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(TestsActivity.this); return true; default: return super.onOptionsItemSelected(item); } } 

Но руководство для разработчиков Android говорит, что мне не нужно обрабатывать событие кнопки «Вверх», как упоминалось в самой нижней части страницы хита: https://developer.android.com/training/basics/actionbar/adding-buttons.html

Поскольку система теперь знает, что MainActivity является родительской активностью для DisplayMessageActivity, когда пользователь нажимает кнопку «Вверх», система переходит к родительской активности по мере необходимости – вам не нужно обрабатывать событие кнопки «Вверх».

Редактировать и ответить:

Как говорится в руководстве для разработчиков Android:

Начиная с Android 4.1 (API-уровень 16), вы можете объявить логического родителя каждого действия, указав в элементе атрибут android: parentActivityName.

Если ваше приложение поддерживает Android 4.0 и ниже, включите библиотеку поддержки в приложение и добавьте элемент внутри. Затем укажите родительскую активность как значение для android.support.PARENT_ACTIVITY, соответствующее атрибуту android: parentActivityName.

Поэтому я думаю, что моя проблема была вызвана двумя причинами:

  1. Запуск приложения на надлежащем эмуляторе. Я нацелился на более высокую версию, но эмулятор работал на API 14 (Android 4.0), поэтому он не знал, как обрабатывать атрибут android:parentActivityName .

  2. Ориентация правильного уровня API в свойствах Project Build Target, как показано ниже:

Введите описание изображения здесь

Solutions Collecting From Web of "Переход к родительской активности в ActionBar без обработки."

Андроид: атрибут parentActivityName поддерживается только после уровня API.

Один из вариантов – использование библиотеки поддержки: v7 в сочетании с NavUtils .

Существует большой учебный материал по этой теме (включая проблему совместимости). Проверьте – http://developer.android.com/training/implementing-navigation/ancestral.html

Это, как говорится, я отправляю свой код ниже, потому что он работает: –

MainActivity.Java

 package com.example.activitydatasend; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button click = (Button) findViewById(R.id.click); click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this,Second.class); intent.putExtra("first", "first"); intent.putExtra("second", "second"); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

SecondActivity.java

 package com.example.activitydatasend; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class Second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Bundle bundle = getIntent().getExtras(); String a = bundle.getString("first"); String b = bundle.getString("second"); System.out.println(a+b); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

AndroidManifext.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activitydatasend" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.activitydatasend.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.activitydatasend.Second" android:label="@string/app_name" android:parentActivityName="com.example.activitydatasend.MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest> 

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/click" android:text="Click" /> </RelativeLayout> 

second.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout> 

Если вы получили ошибку, аналогичную

 E/NavUtils﹕ getParentActivityIntent: bad parentActivityName 

или

 does not have a parent activity name specified. (Did you forget to add the android.support.PARENT_ACTIVITY <meta-data> element in your manifest?) 

Вероятно, вам нужно будет изменить андроид: значение на полный путь. Поэтому вместо

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

делать

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

Вы можете добавить метаданные в манифест для поддержки ОС до JellyBean.

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

Какую версию API вы используете? По моему опыту, для более старых версий необходимо самостоятельно обрабатывать событие с кнопкой вверх, тогда как с более поздними версиями это делается для вас.

Я не смотрел, какая именно версия меняет это, но я знаю, что API 13 не обрабатывает его для вас, в то время как API 16.