多くのアプリ(カレンダー、ドライブ、Playストア)では、ボタンをタップして新しいアクティビティを入力すると、タイトルバーのアイコンが戻るボタンに変わりますが、私が作成しているアプリでは、それはできません。そのアイコンを使用して前の画面に戻るにはどうすればよいですか?
タイトルバーに戻るボタンを作成するには、2つの簡単な手順があります。
まず、タイトルバーに戻るボタンを配置するアクティビティで次のコードを使用して、アプリケーションアイコンをクリック可能にします。
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
上記のコードを追加すると、アプリケーションアイコンの左側に戻る矢印が表示されます。
次に、上記を実行した後、クリックイベントを利用するコードを作成する必要があります。そのためには、実際にアプリケーションアイコンをクリックすると、onOptionsItemSelected
メソッドが呼び出されることに注意してください。したがって、前のアクティビティに戻るには、そのメソッドをアクティビティに追加し、前のアクティビティに戻るIntent
コードをそこに追加します。たとえば、に戻るしようとしているアクティビティをMyActivity
と呼びます。それに戻るには、次のようにメソッドを記述します。
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
それでおしまい!
(Android開発者APIでは、マニフェストをいじってAndroid:parentActivityName
のようなものを追加することをお勧めします。しかし、それはうまくいかないようです。上記の方が簡単で信頼性が高いです。)
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".MainActivity" />
そしてあなたの活動で
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
このコードを使用
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
その後、このコードをonOptionsItemSelected
メソッドに記述します
int id = item.getItemId();
if (id==Android.R.id.home) {
finish();
}
私はついにアクションバー/ツールバーに戻るボタンを適切に追加することができました
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
1.-アクティビティをAndroidManifest.xmlに追加し、メタデータを必ず提供します。
<activity
Android:name="com.example.myfirstapp.DisplayMessageActivity"
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>
2.-次のコードをアクティビティのonCreateメソッドに追加します。
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
3.- onOptionsItemSelectedをオーバーライドし、NavUtils.navigateUpFromSameTask()静的メソッドを使用してスタックをナビゲートします。
@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);
}
ただし、navigateUpFromSameTask()の使用は、アプリが現在のタスクの所有者である(つまり、ユーザーがアプリからこのタスクを開始した)場合にのみ適しています。それが当てはまらず、アクティビティが別のアプリに属するタスクで開始された場合、上に移動するとアプリに属する新しいタスクが作成され、新しいバックスタックを作成する必要があります。
アクティビティがアクティビティを拡張する場合
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
アクションがAppCompatActivityを拡張する場合
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getSupportActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
何もしない、やるべきことは、 アクションの追加 を参照
[オプション]親アクティビティを明示的に定義するには、Manifest.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.YourActivity "
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>
親アクティビティの指定 を参照してください
まず、onCreate関数で次の行を追加します
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
次に、コードに次の関数を追加します。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
グーグルが説明する最も簡単な方法とベストプラクティス ここに :
1. AndroidManifest.xml
でchildActivityの親を追加します。
<activity
Android:name=".ChildActivity"
Android:parentActivityName=".ParentActivity" >
</activity>
2. childActivityの戻るボタンをアクティブにします。
myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);
私のために働いた、私もそれがあなたのために働くことを願っています。
Android studioで5.1の新しいサポートライブラリを使用している場合は、代わりにAppCompatActivityでこれを使用できます
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
乾杯。
最初にこのコードを書く必要があります
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
マニフェストにこの行を追加
<activity Android:name=".MainActivity"
Android:parentActivityName=".PreviousActivity"></activity>
うまくいくと思う
アクティビティがAppCompatActivity
を拡張する場合、次のようにonSupportNavigateUp()
メソッドをオーバーライドする必要があります。
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
onBackPressed()
メソッドでロジックを処理し、そのメソッドをonSupportNavigateUp()
で呼び出すだけで、電話の戻るボタンとツールバーの矢印が同じことを行います。
ここでも同じ動作をするActionBarActivity
を使用しない軽量バージョン:
public class ToolbarConfigurer implements View.OnClickListener {
private Activity activity;
public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
toolbar.setTitle((this.activity = activity).getTitle());
if (!displayHomeAsUpEnabled) return;
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(this);
}
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(activity);
}
}
使用法:new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);
をonCreate
に入れます。
以下のコードをマニフェストファイルに追加する必要があります。戻る矢印機能を追加するアクティビティを検索します。あなたがそれを見つけたら、罰金を科すか、アクティビティを作成します
<activity Android:name=".SearchActivity">
</activity>
次に、次の3行のコードを追加します。
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="com.example.raqib.instadate.MainActivity" />
そして、このコードをonCreate()に追加することを忘れないでください。戻る矢印が必要な特定のアクティビティの方法。
Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
setSupportActionBar(toolbar);
try{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}catch(NullPointerException e){
Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
}
これは私が問題を解決した方法です。ありがとう。
私のアプリにはいつでも行き来できる3つのアクティビティがあるため、正しい答えを得るためにいくつかの答えを混ぜる必要がありました。 Activity1> Activity2> Activity3。 activity3で何かをしていたとき、戻るボタンがActivity2に正しく戻っていました。ただし、Activity2からfinish()
を使用すると、Activity1ではなくActivity3に戻ります。そして、私はAppCompatActivityを拡張しています。だから、私の解決策は:
public class Activity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setHomeButtonEnabled(true);
}
}
androidManifest.xmlの場合:
<activity Android:name=".activities.Activity2"
Android:parentActivityName="com.example.appname.activities.Activity1">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="com.example.appname.activities.Activity1" />
</activity>
最後に、メニューのアクションボタン(アクションバー):
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
...
case Android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
NavUtils.navigateUpFromSameTask(this);
の代わりにfinish()
を使用するとうまくいきました。
ActionBarを使用している場合は、このドキュメントを参照してください http://developer.Android.com/reference/Android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)
次に、onOptionsItemSelected(MenuItem)メソッドを上書きし、着信するAndroid.R.id.homeイベントを探す必要があります。ユーザーがアクションバーの戻るボタンをクリックしたことがわかります。
Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getSupportActionBar()==null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==Android.R.id.home)
finish();
return super.onOptionsItemSelected(item);
}
また、onBackPressed()
をonClickリスナーに配置することもできます。これにより、ボタンはAndroidアプリのデフォルトの「バックアップ/アップ」ボタンのように機能します。
アプリマニフェストで親アクティビティを指定することにより、コードなしでも実行できます。アクティビティAに移動するアクティビティBの戻るボタンが必要な場合は、アクティビティAをマニフェストのアクティビティBの親として追加します。
他の回答では、Toolbar
ウィジェットのXMLでこれを設定することもできません。
app:navigationIcon="?attr/homeAsUpIndicator"
例えば:
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/title_activity_acoustic_progress" />
私を助け、他の人に役立つかもしれない何かを共有するだけです。ここでの回答のほとんどは正しいものですが、getActionBar().setDisplayHomeAsUpEnabled(true);
を使用することで、これはうまくいきませんでした。私が抱えていた問題は、2番目のアクティビティを手動で作成しようとしていたことですが、詳細が含まれています。
本当に問題を解決したのは、Android開発者チュートリアル( https://developer.Android.com/training/basics/firstapp/starting-activity )Android Studio独自のツールを使用して2番目のアクティビティを作成する場合:
Create the second activity
1. In the Project window, right-click the app folder and select New > Activity > Empty Activity.
2. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name and click Finish (leave all other properties set to the defaults).
Android Studio automatically does three things:
- Creates the DisplayMessageActivity file.
- Creates the corresponding activity_display_message.xml layout file.
- Adds the required <activity> element in AndroidManifest.xml.
これは私のために働いています.. 2つのアクティビティ(Activityone、Activitytwo)があるとします
Activitytwoでこのコードを使用します
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Activityoneで
//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));
これは、マニフェストファイル内の2番目のアクティビティに含める必要があります
<activity Android:name=".Activitytwo"
Android:parentActivityName=".Activityone"></activity>
そして結果は次のようになります
Kotlinの場合:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
onBackPressed();
return true;
}