Back button
の上にAction bar
を表示して、前のページ/アクティビティまたはメインページに移動しようとしています(最初のオープン)。そしてそれはできません。
私のコード.
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
コードはonCreate
にあります。
よくこれは戻るボタンを表示するためのシンプルなものです
actionBar.setDisplayHomeAsUpEnabled(true);
それから、onOptionsItemSelectedでbackイベントをカスタマイズできます。
case Android.R.id.home:
this.finish();
return true;
私はonSupportNavigateUp()
がそのための最善かつ最も簡単な方法だと思います、以下のステップをチェックしてください。ステップ1が必要で、ステップ2には選択肢があります。
戻るボタンを表示するステップ1:戻るボタンを表示するには、この行をonCreate()
メソッドに追加します。
assert getSupportActionBar() != null; //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
ステップ2のバッククリックの実装:このメソッドをオーバーライドする
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
これで終わりです
またはステップ2代替案:マニフェストファイルのアクティビティにmetaを追加できます。
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="MainActivity" />
編集:AppCompat
アクティビティを使用していない場合はsupport
Wordを使用しないでください。
getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`
// And override this method
@Override
public boolean onNavigateUp(){
finish();
return true;
}
コメントをくれた@atariguyに感謝します。
魔法は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);
}
}
公式ソリューション
これら2つのコードスニペットを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);
}
より低いSDKをサポートするために明示するためにメタデータとparentActivityを追加します。
<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);
}
}
これがお役に立てば幸いです。
このコードを試してください。戻るボタンが必要な場合にのみ検討してください。
@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
で親アクティビティ(アクションバーの戻るボタンが押されたときに呼び出されるアクティビティ)を定義している間:
マニフェストの<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
で戻る(up)ボタンを有効にしてください。
@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);
}
そして、あなたはすべて設定されます!
私は上記が多くの有用な解決策であることを知っています、しかし今回私はこの記事(sdk 23を持つ現在のAndroid Studio 2.1.2)を読みます上記のいくつかの方法はうまくいきません。
以下は副活動のための私の解決策は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>
次に、サブアクティビティがFragmentActivityではなくAppCompatActivity
を拡張するようにします。
第三に、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);
}
}
これが役立つことを願っています!
これを実現するには、2つのステップがあります。
ステップ1:AndroidManifest.xml
に移動して、このパラメーターを<activity>
タグに追加します - Android:parentActivityName=".home.HomeActivity"
例:
<activity
Android:name=".home.ActivityDetail"
Android:parentActivityName=".home.HomeActivity"
Android:screenOrientation="portrait" />
ステップ2:ActivityDetail
に前のページ/アクティビティ用のaction
を追加します
例:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
onCreateメソッドに書き込み -
Toolbar toolbar = findViewById(R.id.tool);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
finish();
}
これはxmlファイルです。
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.Dark"
Android:id="@+id/tool">
styles.xmlでそれをに変更します。
Theme.AppCompat.Light.NoActionBar
これが私たちがしなければならないことのすべてです。
これは簡単で、私にはとてもうまくいきます
onCreate()メソッド内にこれを追加してください
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
この外側のoncreate()メソッドを追加してください
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
あなたのonCreate()で、これを試してください
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
そしてクリケットイベントのために、
@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();
}
答えるには遅すぎるかもしれませんが、私は私の意見ではより短くより機能的な解決策を持っています。
// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
ActionBar actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
画面に戻るための作業コード.
@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;
}
Oncreate()の場合この行を書いてください - >
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
それからそのクラスで以下のメソッドを実装します
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
// app icon in action bar clicked; go home
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Manifest.xml
<activity
Android:name=".Activity.SecondActivity"
Android:label="Second Activity"
Android:parentActivityName=".Activity.MainActivity"
Android:screenOrientation="portrait"></activity>
OnCreate関数に以下のコードを追加します。
getSupportActionBar()。setDisplayHomeAsUpEnabled(true);
そしてオーバーライド:@Override public boolean onOptionsItemSelected(MenuItem item){onBackPressed(); trueを返します。 }