从视图访问活动的最佳实践

时间:2012-03-15 20:34:34

标签: android

我有一个看似简单的问题,但我无法弄清楚最佳做法是什么:)

查看(启动查看活动上的方法?>访问的最佳做法是什么?

例如,我有一个活动,其布局包含按钮文本字段。我想点击按钮,在我的活动上调用一个方法,用某个值更新文本字段。我有多种解决方案:

1 - 直接在活动上的 OnClickListener 的内部类,因此我可以使用 MyActivity.this 活动的方法 onClick 方法

上的.updateTextField()

2 - OnClickListener 的外部类,我可以执行 onClick 方法:((MyActivity)getContext())。updateTextField()

3 - 在我实例化时,在我的 OnClickListener 类中引用活动 myButton.setOnClickListener(new MyOnclickListener(MyActivity));

我不想要解决方案1,因为我不喜欢那么多内部类,我想要可重用的代码。解决方案2似乎很好,但如果我的上下文不是活动,则会在运行时产生错误。解决方案3似乎也很好,但“重”。

查看 Actitity 告诉Android需要在活动上完成某些操作的最佳做​​法是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用onclickListener实现活动并添加未实现的方法onclick 只需检查视图,看看在使用多个按钮的情况下点击了哪个按钮

答案 1 :(得分:0)

虽然我发现自己最终会找到内部课程,但还有其他选择。 您可以创建如下所示的界面,让您的活动实现它:

public interface UpdateableTextField {
    public void updateTextField();
}

现在让你想要的活动实现这个界面。

现在,创建一个实现View.OnclickListener的类,并设置构造函数以将UpdateableTextField作为参数:

public class MyListener implements View.OnclickListener {
    UpdateableTextField updatable;

    public MyListener(UpdateableTextField updatable) {
        this.updateable = updatable;
    }

    @Override public void onClick(View v) {
        // do some stuff
        updateable.updateTextField();
    }
}

最后,在活动中:

public class MyActivity extends Activity implementes UpdateableTextField{
    @Override public void onCreate(Bundle savedInstanceState) {
        // usuall stuff
        MyListener listener = new MyListener(this);
        someView.setOnClickListener(listener);
        // other stuff
    }

    @Override public void updateTextField() {
        // well, update the text field :)
    }
}