我有一个listview的活动。当用户单击该项目时,项目“viewer”将打开:
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);
}
});
这样可以正常工作,但在操作栏上,应用程序图标旁边的后退箭头不会被激活。我错过了什么吗?
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>
http://developer.android.com/design/patterns/navigation.html#up-vs-back
如果您使用的是工具栏,我遇到了同样的问题。我按照以下两个步骤解决了问题
if (getSupportActionBar() != null)
{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
以下步骤足以支持后退按钮:
第1步:此代码应该在Manifest.xml中
<activity android:name=".activity.SecondActivity" android:parentActivityName=".activity.MainActivity"/>
第2步:你不会给
Toolbar toolbar = findViewById(R.id.second_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
在启动子活动时在您的父活动中。
第3步:如果您需要从Child Activity返回Parent Activity,那么您只需为Child Activity提供此代码。
<activity android:name=".activity.ChildActivity"
android:parentActivityName=".activity.ParentActivity"
android:screenOrientation="portrait">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.ParentActivity" /></activity>
确保在Activity中启用了ActionBar Home Button:
@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);
}
扩展MainActivity
的示例ActionBarActivity
:
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>
扩展MainActivity
的示例ActionBarActivity
:
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);
}
}
要启用ActionBar后退按钮,您显然需要在Activity中使用ActionBar。这是由您使用的主题设置的。您可以在AndroidManfiest.xml
中为您的活动设置主题。如果你正在使用例如@android:style/Theme.NoTitleBar
主题,你没有ActionBar。在这种情况下,对getActionBar()
的调用将返回null。因此,请确保首先使用ActionBar。
如果按后退按钮,下一步是将android:parentActivityName
设置为您要导航的活动。这应该在AndroidManfiest.xml
中完成。
现在,您可以在“子”活动的onCreate
方法中启用后退按钮。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
现在你应该实现后退按钮的逻辑。您只需覆盖“子”活动中的onOptionsItemSelected
方法,并检查后退按钮的id是android.R.id.home
。
现在你可以解雇方法qazxsw poi但是如果你没有在你的NavUtils.navigateUpFromSameTask(this);
中指定qazxsw poi这会使你的应用程序崩溃。
有时候这就是你想要的,因为它会提醒你忘记了“某些东西”但是如果你想要阻止它,你可以使用android:parentActivityName
方法检查你的活动是否有父。如果返回null,则表示您没有指定父级。
在这种情况下,您可以触发AndroidManfiest.xml
方法,该方法与用户按下设备上的后退按钮基本相同。一个好的实现,永远不会崩溃你的应用程序
getParentActivityIntent()
请注意,用户看到的动画在onBackPressed()
和@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);
}
}
之间是不同的。
这取决于你走的路,但我发现解决方案很有帮助,特别是如果你为所有活动使用基类。
AndroidManifest文件:
NavUtils.navigateUpFromSameTask(this);
添加DetailsActivity:
onBackPressed()
这是工作 :]
<activity android:name=".activity.DetailsActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="br.com.halyson.materialdesign.activity.HomeActivity" />
</activity>
资料来源:protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
我认为@OptionsItem(android.R.id.home)
void homeSelected() {
onBackPressed();
}
是最简单和最好的方法
onSupportNavigateUp()
要实现这一目标,只需两个步骤,
第1步:转到AndroidManifest.xml并在标签中添加参数 - android:parentActivityName =“。home.HomeActivity”
例如:
Click here for complete code
第2步:在ActivityDetail中添加上一页/活动的操作
例如:
https://stackoverflow.com/a/46903870/4489222
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
在@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);}
}
方法中为新的apis。
在OnCreate方法中添加:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后添加此方法:
onCreated