0

我有一个包含 5 个活动的应用程序。所有这些活动的设置都可以使用菜单按钮(选项菜单)并选择“设置”进行修改。这将打开一个对话框,其中显示所有设置以及可以进行修改的位置。

当我通过按“确定”按钮关闭此设置对话框时,我希望调用选项菜单的活动更新其视图。

选项菜单在所有活动中都是这样激活的:

    @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()调用 Activity 的方法。

制作一个顶级抽象 Activity 类,例如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();
}

并且每个activity都会实现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 回答