2

子アクティビティを開始する親アクティビティがあります。

子アクティビティでは、次のことを行います。

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

[ホーム/アップ] ボタンをクリックするとfinish、アクティビティが表示されます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

さらに、私は子アクティビティfinishのもう1つの場所で行い、両方の場所で親アクティビティに戻ります。finish

私の質問:

私の問題は、いずれかの場合にのみ親アクティビティを更新したいということです。finishes

Up ボタンからではなくFinish を行うと- Parent Activity のデータが変更されるので - Back/Up ボタンを押すと、 Parentを更新する必要はありませんが、それ以外を行うと、finish更新したい. _

どうすればそれを検出できますか?

4

6 に答える 6

7

子アクティビティを開始する

startActivityForResult(intent, requestCode)

そして、アップボタンの場合は結果を子アクティビティで成功として設定し、バックプレスの場合は結果を失敗として設定します。

onActivityResult(..)親アクティビティのステータスを取得し、必要に応じて親アクティビティを強制終了します。

于 2015-12-11T13:53:18.637 に答える
2

説明したように、2 つの場所に finish() メソッドがあります。1 つは ActionBar の戻るボタン ( AbBackとします) で、もう 1 つは別の場所 ( RandomBack ) にあります。

Aをメインのアクティビティとし、 Bを子アクティビティとします。

A では startActivity() メソッドの代わりに、

startActivityForResult(Intent intent, int REQUEST_CODE);

これは、アクティビティ B が終了したときにデータをこのアクティビティに返すことができるようにするためであり、データに応じて更新/非更新を切り替えることができます。

したがって、アクティビティ Bでは、

AbBackの場合、このメソッドsetResult(RESULT_OK)を呼び出します。RandomBackの場合は、setResult(RESULT_CANCELED)を呼び出します。

最後に Activity Aで、メソッドをオーバーライドする必要があります

onActivityResult(int requestCode, int resultCode, Inテントデータ)

ここで、 resultCode == RESULT_OK を比較できます。そうであれば、データがAbBackからのものであるか、そうでない場合はRandomBackからのものであり、必要な更新を行うことができます。

于 2015-12-11T14:08:43.287 に答える
2

親アクティビティ内

startActivityForResult(Intent intent, int REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
case RESULT_OK:
    //refresh parentAcitivty  
    //get the result from the Up button back
    //e.g adapter.notifydatasetchanged()
case RESULT_CANCEL:
    //Do nothing 
    //return from childActivity by other finishes

ChildActivity で

case 1: //**from the Up button**
   setResult(RESULT_CANCEL);
   finish();
case 2: //**do the other finish**
   setResult(RESULT_OK);
   finish();

コードがヒントになることを願っています。

于 2015-12-11T14:30:49.893 に答える
2

この場合、 を使用しますonResume

@Override
protected void onResume() {
    super.onResume();
    // your code (for example: initialize(); etc.. )
}

この記事を参照すると、その理由が理解できます。

アクティビティのライフサイクル Android

于 2018-02-01T05:09:42.420 に答える
0

navigateUpFromTask()を使用してみてください

于 2015-12-11T13:56:00.383 に答える