可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I use ActionBarSherlock (although I don't think it matters).
I have a Main activity and an About activity. I want the About activity to show the back-arrow by its logo, and do the proper animation and such.
I don't know how to do this properly.
Currently, I have under onOptionsMenuItemSelected to launch the Main activity when the Up/Home button is pressed, but it's hacky and doesn't really work right. It plays the wrong animation, and handles multitasking poorly.
How do I set this up right?
Here's the part in my Main activity that launches the About:
Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);
Here's my About activity:
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);
}
}
}
回答1:
Have you also tried this (taken from Android website here) :
in the manifest, for each activity X that needs to go to the main activity, add this to the code:
@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);
}
and this to its manifest xml tag:
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />
if you need to still have the same state on the main activity, use this code instead :
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(this, intent);
if the API is 16 or above, you can add an attribute of parentActivityName with the path to the main activity instead of the metadata .
回答2:
Found out the root of my problem was a change in the manifest I made a while ago: I added this line:
android:launchMode="singleInstance"
so my main activity wouldn't be relaunched. Changing it to:
android:launchMode="singleTask"
solved my problems, and I was able to remove all the onOptionsItemSelected
stuff. I knew there was something wrong, that Android should have been able to handle this better, and I was right. Check the manifest :P
回答3:
In your onCreate(Bundle savedInstanceState)
, do
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Then in your onOptionsItemSelected(MenuItem item)
, do
@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);
}
回答4:
You can Handle Action Bar button by using Code or XML.
Check this code
if you want it programmatically Add this line in onCreate() method
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
And Override this method onSupportNavigateUp()
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
OR Non-programmatically you can add meta to manifest file as
<activity android:name="Current Activity"
android:parentActivityName="Activity you want to open">
</activity>
Note: Make sure Actionbar is not null.
回答5:
For who want to just go back in the previous activity, this is the simplest solution:
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);
}
回答6:
make sure your android:minSdkVersion="11" which could be seen in the manifest file, Up icon has been included from APK 11. I have made a small sample plz try the below link which may be help you just import into your work space
http://www.mediafire.com/?hktdvts7yyduwv1