Ste*_*oen 27 java android android-actionbar
我使用ActionBarSherlock(虽然我不认为这很重要).
我有一个主要活动和一个关于活动.我希望About活动通过其徽标显示后箭头,并执行适当的动画等.我不知道如何正确地做到这一点.
目前,我在onOptionsMenuItemSelected下按下Up/Home按钮时启动Main活动,但是它很hacky并且不能正常工作.它播放错误的动画,并且处理多任务处理不佳.
我该如何正确设置?
这是我的Main活动中启动About的部分:
Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);
Run Code Online (Sandbox Code Playgroud)
这是我的关于活动:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
and*_*per 35
您是否也尝试过这一点(从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);
}
Run Code Online (Sandbox Code Playgroud)
这到它的清单xml标签:
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
Run Code Online (Sandbox Code Playgroud)
如果您仍需要在主活动上保持相同的状态,请改用以下代码:
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
Run Code Online (Sandbox Code Playgroud)
如果API为16或更高,则可以添加parentActivityName的属性以及主活动的路径而不是元数据.
Ste*_*oen 13
发现我的问题的根源是我前一段时间所做的清单的改变:我添加了这一行:
android:launchMode="singleInstance"
Run Code Online (Sandbox Code Playgroud)
所以我的主要活动不会重新启动.将其更改为:
android:launchMode="singleTask"
Run Code Online (Sandbox Code Playgroud)
解决了我的问题,我能够删除所有的onOptionsItemSelected东西.我知道有些问题,Android应该能够更好地处理这个问题,而且我是对的.检查清单:P
Ale*_*ood 10
在你的onCreate(Bundle savedInstanceState),做
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
然后在你的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);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用代码或XML处理操作栏按钮.
检查此代码
如果你想以编程方式在onCreate()方法中添加这一行
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
并覆盖此方法onSupportNavigateUp()
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
Run Code Online (Sandbox Code Playgroud)
或者以非编程方式,您可以将meta添加到清单文件中
<activity android:name="Current Activity"
android:parentActivityName="Activity you want to open">
</activity>
Run Code Online (Sandbox Code Playgroud)
注意:确保Actionbar不为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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26930 次 |
| 最近记录: |