显示操作栏上的后退button
我试图在Action bar
上显示一个“ Back button
来移动上一页/活动或主页面(第一次打开)。 而我做不到。
我的代码。
ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(true);
代码在onCreate
。
以及这是一个简单的显示button
actionBar.setDisplayHomeAsUpEnabled(true);
然后你可以在onOptionsItemSelected中定制返回事件
case android.R.id.home: this.finish(); return true;
我认为onSupportNavigateUp()
是最好的和最简单的方法来做到这一点
检查下面的代码
如果你想以编程方式在onCreate()
方法中添加这一行
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
注意:确保Actionbar不为空。
并重写此方法
@Override public boolean onSupportNavigateUp(){ finish(); return true; }
而已
或者非编程方式,您可以将清单文件中的活动添加到元素中
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="MainActivity" />
神奇的事情发生在onOptionsItemSelected
。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon in action bar clicked; go home Intent intent = new Intent(this, HomeActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } }
官方解决scheme
将这两个代码片段添加到您的SubActivity中
@Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().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); }
添加元数据和parentActivity来显示以支持较低的sdk。
<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.SubActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
请参考: http : //developer.android.com/training/implementing-navigation/ancestral.html
将这些行添加到onCreate()
android.support.v7.app.ActionBar actionBar = getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
并在onOptionItemSelected
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: //Write your logic here this.finish(); return true; default: return super.onOptionsItemSelected(item); } }
希望这会帮助你..!
试试这个代码,只有当你需要后退button时才考虑它。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //YOUR CODE getSupportActionBar().setDisplayHomeAsUpEnabled(true); //YOUR CODE } @Override public boolean onOptionsItemSelected(MenuItem item) { onBackPressed(); return true; }
在你的onCreate
方法中添加:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
在AndroidManifest.xml
定义父活动(按下操作栏中的后退button后将被调用的活动):
在Manifest的<activity>
定义中,添加下面的行:
android:parentActivityName="com.example.activities.MyParentActivity"
我知道我有点晚了,但是能够通过直接跟随文档来解决这个问题。
添加元数据标签到AndroidManifest.xml
(所以系统知道)
<activity android:name=".Sub" android:label="Sub-Activity" android:parentActivityName=".MainChooser" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainChooser" /> </activity>
接下来,启用MainActivity
的后退(向上)button
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_child); // my_child_toolbar is defined in the layout file Toolbar myChildToolbar = (Toolbar) findViewById(R.id.my_child_toolbar); setSupportActionBar(myChildToolbar); // Get a support ActionBar corresponding to this toolbar ActionBar ab = getSupportActionBar(); // Enable the Up button ab.setDisplayHomeAsUpEnabled(true); }
而且,你们都将成立!
来源: Android开发人员文档
我知道上面是很多有用的解决scheme,但是这次我读了这篇文章(当前Android Studio 2.1.2与sdk 23)上面的某些方法不起作用。
以下是我的子活动的解决scheme是MapsActivity
首先,你需要添加parentActivity
AndroidManifest.xml中
喜欢这个 :
<application ... > ... <!-- Main activity (which has no parent activity) --> <activity android:name="com.example.myapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity ..... android:parentActivityName=".MainActivity" > <!-- Support Parent activity for Android 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myapp.MainActivity" /> </activity> </application>
其次,确保您的子活动扩展了AppCompatActivity
,而不是FragmentActivity。
第三,重写onOptionsItemSelected()
方法
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon action bar is clicked; go to parent activity this.finish(); return true; case R.id.action_settings: return true; default: return super.onOptionsItemSelected(item); } }
希望这会有所帮助!
试试这个,在你的onCreate()
getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true);
而对于clickevent,
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // app icon in action bar clicked; goto parent activity. this.finish(); return true; default: return super.onOptionsItemSelected(item); } }
我以这种方式解决
@Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case android.R.id.home: onBackPressed(); finish(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onBackPressed(){ Intent backMainTest = new Intent(this,MainTest.class); startActivity(backMainTest); finish(); }
我的工作代码返回屏幕。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Toast.makeText(getApplicationContext(), "Home Clicked", Toast.LENGTH_LONG).show(); // go to previous activity onBackPressed(); return true; } return super.onOptionsItemSelected(item); }
public void initToolbar(){ //this set back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); //this is set custom image to back button getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image); } //this method call when you press back button @Override public boolean onSupportNavigateUp(){ finish(); return true; }
要做到这一点,只需要两个步骤,
第1步:转到AndroidManifest.xml
并在<activity>
标记中添加此参数 – android:parentActivityName=".home.HomeActivity"
例:
<activity android:name=".home.ActivityDetail" android:parentActivityName=".home.HomeActivity" android:screenOrientation="portrait" />
第2步:在ActivityDetail
为上一页/ ActivityDetail
添加您的action
例:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); }