我有一个带有列表视图的活动。当用户单击项目时,项目“查看器”打开:
List1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Intent nextScreen = new Intent(context,ServicesViewActivity.class);
String[] Service = (String[])List1.getItemAtPosition(arg2);
//Sending data to another Activity
nextScreen.putExtra("data", datainfo);
startActivityForResult(nextScreen,0);
overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
}
});
这很好,但在操作栏上,应用图标旁边的后退箭头没有被激活。我错过什么了吗?
要启用ActionBar后退按钮,显然您的活动中需要一个ActionBar。这是由您使用的主题设置的。您可以在AndroidManfiest中设置活动的主题。xml。如果您使用的是android:样式/主题。NoTitleBar主题,您没有操作栏。在这种情况下,对getActionBar()的调用将返回null。因此,首先确保你有一个ActionBar。
下一步是将android:parentActivityName设置为您想要导航的活动,如果您按下后退按钮。这应该在AndroidManifest中完成。xml也是。
现在您可以在“子”活动的
onCreate
方法中启用返回按钮。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
现在,您应该实现后退按钮的逻辑。您只需覆盖“child”活动中的onOptionsItemSelected方法,并检查返回按钮的id,该按钮是android。R、 id.home
。
现在可以启动方法NavUtils。navigateUpFromSameTask(本)
有时这是你想要的,因为它提醒你忘记了“某事”。因此,如果要防止出现这种情况,可以使用getParentActivityIntent()
方法检查活动是否有父级。如果返回null,则表示您没有指定父级。
在这种情况下,您可以启动与用户按下设备上的后退按钮基本相同的方法。一个不会使应用程序崩溃的好实现是:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
请注意,用户看到的动画在NavUtils之间是不同的。navigateUpFromSameTask(本)和onBackPressed()
。
这取决于你走哪条路,但我发现这个解决方案很有帮助,尤其是如果你在所有活动中使用基类。
确保在活动中启用了ActionBar Home按钮:
@Override
public void onBackPressed() {
...
super.onBackPressed();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
扩展ActionBarActive
的示例MainActive
:
public class MainActivity extends ActionBarActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// API 5+ solution
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
这样你想要的所有活动都可以有背压。
http://developer.android.com/training/implementing-navigation/ancestral.html
androidManifest.xml:
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- The meta-data element is needed for versions lower than 4.1 -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
扩展ActionBarActive
的示例MainActive
:
public class MainActivity extends ActionBarActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@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);
}
}
Selvin已经发布了正确的答案。这里,漂亮代码中的解决方案:
public class ServicesViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// etc...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
函数NavUtils。navigateUpFromSameTask(this)
要求您在AndroidManifest中定义父活动。xml文件
<activity android:name="com.example.ServicesViewActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.ParentActivity" />
</activity>
请参阅此处了解更多信息。
问题内容: 我有一个带有列表视图的活动。当用户单击项目时,将打开项目“查看器”: 效果很好,但是在操作栏上,应用图标旁边的向后箭头没有被激活。我想念什么吗? 问题答案: Selvin已经发布了正确答案。在这里,用漂亮的代码解决方案: 该函数要求您在AndroidManifest.xml文件中定义父活动 请参阅此处以进一步阅读。
我正在使用android导航组件库。我用导航图设置了两个片段。我想在我的片段内按下后退按钮时做一些额外的动作。 我使用这段代码来处理工具栏上的按钮点击,但我也想处理后退按钮按下。我该怎么做?
我用这个教程来实现facebook登录等。 Facebook登录 我在这里添加了新的片段来显示朋友列表。现在,当我在新添加的片段上按下后退按钮时,它会把我带到SPLASH片段,我想要动作栏上同样的后退按钮行为。这意味着当我在我的新片段上时,它会在动作栏上显示一个后退按钮。按下后退按钮会把我带回SPLASH屏幕。
我试图用这段代码来显示我的个人档案活动: 当我点击Profile菜单项时,我可以看到我的ProfileActivity,但我的ActionBar上没有任何back按钮来返回我以前的活动。 那么,我如何显示一些后退按钮?我的代码是否正确以显示菜单中的活动?
我正在编写一个小型PyQt4应用程序,它只是一个“是/否”对话框,必须执行一个外部命令(例如“eject/dev/sr0”)并退出。 应用程序运行时,它在按下“是”按钮后执行命令,但我无法在执行命令时使对话框本身退出。 这是我的密码。当我单击“是”时,它会正确地调用'eject/dev/sr0'命令,但在此之后对话框仍然可见。我必须单击“否”关闭应用程序,我希望它在执行命令时自动关闭。我应该添加/