Подтвердить что ты не робот

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

Я использую 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);
        }
    }
}
4b9b3361

Ответ 1

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

android:launchMode="singleInstance"

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

android:launchMode="singleTask"

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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