0

5つのアクティビティを持つアプリがあります。これらすべてのアクティビティには、メニューボタン(optionsmenu)を使用して[設定]を選択して変更できる設定があります。これにより、すべての設定が表示され、変更が可能なダイアログが開きます。

「OK」ボタンを押してこの設定ダイアログを閉じると、optionsmenuを呼び出したアクティビティでビューが更新されます。

オプションメニューは、すべてのアクティビティで次のようにアクティブ化されます。

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.firstactivity_options_menu, menu);      
    return true;
}

そして、onOptionsItemSelectedの例は次のとおりです...

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.settings) {
        class.settingsDialog(this);         
    } else if (item.getItemId() == R.id.about) {
        try {
            alertDialog(getResources().getString(R.string.settings_about), getAssets().open("about"), this);
        } catch (IOException e) {
        }
    }   
    return true;
}

私の問題は、R.id.settingsと一致した後にアクティビティビューを更新することです。これは可能ですか?もしそうなら、私にいくつかのポインタを教えてください...

4

2 に答える 2

0

onResume()ダイアログはアクティビティのメソッドを強制的に呼び出さないため、スーパー/サブクラスアプローチまたはインターフェイスを実装します。

最上位の抽象アクティビティクラスを作成します。例:SuperMainActivity

public abstract class SuperMainActivity extends Activity
{
  public abstract void updateUI();
}

SuperMainActivity次に、各アクティビティを単にではなく拡張Activityして、メソッドを実装しupdateUI()ます。

次に、あなたのsettingsDialog()方法で、それを次のいずれかにします:

SuperMainActivityアクティビティ/コンテキストパラメータの代わりにパラメータを受け入れます。

また:

コールバックしたいときにキャストを行う

((SuperMainActivity)myVariable).updateUI();

インターフェースはおおむね似ています:

public interface ActivityCallback
{
  public void updateUI();
}

そして、各アクティビティはActivityCallbackを実装します

そのような

public class MainActivity implements ActivityCallback
{
  public void updateUI()
  {
    //implementation. Differs per class
  }
}

次に、settingsDialog()メソッドはActivityCallbackパラメーターを受け入れる必要があります。そうしないと、再度キャストします。

このアプローチを決定した場合settingsDialog()でも、電話をかけるときは、

settingsDialog(this); 

アクティビティはパラメータの要件を満たすためです。

于 2013-01-08T21:27:28.220 に答える
0

これを行うにはおそらくさまざまな方法がありますが、クリックした後Ok、を使用しIntentてアクティビティを開始し、アクティビティを呼び出しfinish()てビューを再作成できます

于 2013-01-08T21:11:48.957 に答える