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

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

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

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

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

Вот часть моей основной деятельности, которая запускает 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);
        }
    }
}

Ответы на вопрос(6)

Решение Вопроса

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

android:launchMode="singleInstance"

поэтому моя основная деятельность не будет возобновлена. Меняя это на:

android:launchMode="singleTask"

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

 10 июн. 2013 г., 11:34
Таким образом, использование опубликованного вами кода очистит все действия, кроме основного (которое также является первым)?
 23 апр. 2016 г., 12:49
Документация Android гласит: «Другие режимы» # #2014; singleTask и singleInstance & # x2014; не подходят для большинства приложений, так как приводят к модели взаимодействия, которая, вероятно, незнакома пользователям и сильно отличается от большинства других приложений. & quot;developer.android.com/guide/topics/manifest/…

В вашем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);
}
 13 мар. 2014 г., 16:36
@ D_Steve595 У меня та же проблема. Вы когда-нибудь выясняли, как сделать анимацию такой же, как обычную кнопку возврата?
 Steven Schoen03 июл. 2012 г., 06:50
Обновлен оригинальный пост.
 03 июл. 2012 г., 06:42
... хорошо, это работало хорошо для меня. Может быть, вы должны опубликовать свой код? Вы импортируете правильныйMenuItem? Вы расширяетеSherlockActivity? Я не знаю, что еще предложить, ха-ха
 Steven Schoen03 июл. 2012 г., 06:39
Это именно то, что у меня есть. Он не работает, как кнопка Google Up. Он воспроизводит анимацию для запуска нового действия (а не возврата к последнему).

убедитесь, что ваш андроид: minSdkVersion = & quot; 11 & quot; который можно увидеть в файле манифеста, значок APK был добавлен из APK 11. Я сделал небольшой пример, плз, попробуйте ссылку ниже, которая может помочь вам просто импортировать в рабочее пространство

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

 13 мар. 2014 г., 15:30
up icon может быть использованbefore Api Level 11 сGoogle support, Вы бы вместо этого позвонилиgetSupportActionBar().setDisplayHomeAsUpEnabled(true).

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

в манифесте для каждого действия 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 с путем к основному виду деятельности вместо метаданных.

 19 мар. 2015 г., 09:27
Что если его фрагмент? как это сделать ?
 31 мар. 2016 г., 08:32
@ Barhav О, вы имеете в виду API 16, а не 11. хорошо, я исправлю это. Благодарю.
 31 мар. 2016 г., 07:29
@Bhargav Что тут исправлять? Если вы используете библиотеку поддержки, вы используете тег метаданных, о котором я упоминал
 19 мар. 2015 г., 16:14
@ user2056563 аналогичным образом. Вы используете & quot; getActivity & quot; когда вам нужно действие, а также "setHasOptionsMenu (true)" внутри & quot; onCreate & quot; фрагмента. не забудьте вызвать «super.onCreateOptionsMenu» для фрагмента "onCreateOptionsMenu"; метод (я называю это в конце, но я думаю, что в начале тоже все нормально).
 31 мар. 2016 г., 07:16
Beginning in Android 4.1 (API level 16), you can declare the logical parent of each activity by specifying the android:parentActivityName attribute in the <activity> element. взято изdeveloper.android.com/training/implementing-navigation/… Так что я бы исправил этот последний бит информации

Вы можете обрабатывать кнопку панели действий, используя код или 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>

Note: Make sure Actionbar is not null.

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

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

Ваш ответ на вопрос