リストビューを使用したアクティビティがあります。ユーザーがアイテムをクリックすると、アイテム「ビューア」が開きます。
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);
}
});
これは正常に機能しますが、アクションバーでは、アプリアイコンの横にある戻る矢印がアクティブになりません。何か不足していますか?
セルビンはすでに正しい答えを投稿しました、ここにきれいなコードの解決策があります;-)
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
アクティビティでActionBarホームボタンが有効になっていることを確認します。
@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の戻るボタンを有効にするには、明らかにアクティビティに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
であることを確認します。
メソッドNavUtils.navigateUpFromSameTask(this);
を起動できるようになりましたBUTAndroid:parentActivityName
をAndroidManfiest.xml
に指定していない場合、アプリがクラッシュします。
「何か」を忘れたことを思い出させるので、これはあなたが望むものであることがありますが、これを防ぎたい場合は、getParentActivityIntent()
メソッドを使用してアクティビティに親があるかどうかを確認できます。これがnullを返す場合、親を指定してはいけません。
この場合、ユーザーがデバイスの戻るボタンを押すのと基本的に同じことを行う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);
}
}
NavUtils.navigateUpFromSameTask(this);
とonBackPressed()
では、ユーザーに表示されるアニメーションが異なることに注意してください。
あなたが取る道はあなた次第ですが、特にすべての活動に基本クラスを使用している場合、私は解決策が役立つと思いました。
AndroidManifestファイル:
<activity Android:name=".activity.DetailsActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="br.com.halyson.materialdesign.activity.HomeActivity" />
</activity>
detailsActivityに追加します。
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()
が最も簡単で最良の方法だと思います
このリンクのコードを確認してください 完全なコードについてはここをクリック
https://stackoverflow.com/a/46903870/4489222
これを達成するために、2つのステップがあります。
ステップ1:AndroidManifest.xmlに移動し、タグにパラメーターを追加します-Android:parentActivityName = "。home.HomeActivity"
例:
<activity
Android:name=".home.ActivityDetail"
Android:parentActivityName=".home.HomeActivity"
Android:screenOrientation="portrait" />
ステップ2:ActivityDetailで、前のページ/アクティビティのアクションを追加します
例:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);}
}
ツールバーを使用している場合、同じ問題に直面していました。私はこれらの2つのステップに従って解決しました
<activity Android:name=".activity.SecondActivity" Android:parentActivityName=".activity.MainActivity"/>
Toolbar toolbar = findViewById(R.id.second_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
OnCreateメソッドでこれを追加します。
if (getSupportActionBar() != null)
{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
次に、このメソッドを追加します。
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
新しいAPIのonCreated
メソッド。
次の手順で戻るボタンを使用できます。
ステップ1:このコードはManifest.xmlにある必要があります
<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>
ステップ2:あなたは与えません
finish();
子アクティビティを開始しながら、親アクティビティで。
ステップ3:子アクティビティから親アクティビティに戻る必要がある場合は、子アクティビティにこのコードを指定します。
startActivity(new Intent(ParentActivity.this, ChildActivity.class));