【问题标题】:How do I show back button in Activity如何在活动中显示后退按钮
【发布时间】:2015-02-26 10:58:32
【问题描述】:

我试过这段代码来显示我的ProfileActivity

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_profile) {
            Intent mainIntent = new Intent(Contracts.this, Profile.class);
            startActivity(mainIntent);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

当我点击个人资料菜单项时,我可以看到我的ProfileActivity,但我的ActionBar 上没有任何返回按钮来返回我之前的活动。

那么,我怎样才能显示一些后退按钮?我的代码是否正确以显示菜单中的活动?

【问题讨论】:

标签: android android-activity android-actionbar


【解决方案1】:

在您的个人资料活动中检查是否缺少某些内容:

public class Profile extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // etc...
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

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

函数NavUtils.navigateUpFromSameTask(this)需要你在AndroidManifest.xml文件中定义父activity

    <activity android:name="com.example.ServicesViewActivity" >
            <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.ParentActivity" />
    </activity>

http://developer.android.com/design/patterns/navigation.html#up-vs-back

【讨论】:

  • 不起作用:java.lang.RuntimeException:无法启动活动 ComponentInfo{com.mybusiness.myapp/com.mybusiness.myapp.Profile}:java.lang.NullPointerException:尝试调用虚拟方法' void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' 在空对象引用上
  • 问题很简单——你的活动继承自新的android.support.v7.app.ActionBarActivity。我们应该调用getSupportActionBar() 而不是getActionBar()
【解决方案2】:

Profile.classonCreate()方法里放这个,

getActionBar().setDisplayHomeAsUpEnabled(true);

还有这个,

@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{       
    onBackPressed();
    return true;
}

【讨论】:

  • 不起作用:java.lang.RuntimeException:无法启动活动 ComponentInfo{com.mybusiness.myapp/com.mybusiness.myapp.Profile}:java.lang.NullPointerException:尝试调用虚拟方法' void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' 在空对象引用上
  • 为了完整起见,我将在onOptionsItemSelected 中添加finish() 调用,以说明如何返回上一个活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2020-09-16
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多