正确的方法来处理操作栏上按钮?(Proper way to handle action bar up

2019-06-25 23:58发布

我用ActionBarSherlock(虽然我不认为它很重要)。

我有一个主要活动和关于活动。 我希望关于活动以显示其标志背面箭头,并做适当的动画和这样。 我不知道如何正确地做到这一点。

目前,我有onOptionsMenuItemSelected下按下向上/主页按钮时启动的主要活动,但它的哈克并没有真正工作的权利。 它扮演了错误的动画,并处理多任务不佳。

如何设置这对吗?

下面是启动关于我的主要活动的一部分:

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

Answer 1:

您是否也尝试过这一点(从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与路径主要活动,而不是元数据。



Answer 2:

发现我的问题的根源是在我前一阵子做清单的变化:我加入这行:

android:launchMode="singleInstance"

所以我的主要活动将不会重新启动。 它更改为:

android:launchMode="singleTask"

解决了我的问题,我是能够消除所有的onOptionsItemSelected东西。 我知道有什么不对劲,那Android的应该已经能够处理这更好的,我是对的。 检查清单:P



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


Answer 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>

注意:确保动作条不为空。



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


Answer 6:

确保你的安卓的minSdkVersion =“11”,这可能在清单文件中可以看出,截至图标已被列入由APK 11.我做了一个小样本PLZ尝试下面的链接可以帮助您刚才导入到您的工作空间

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



文章来源: Proper way to handle action bar up button?