2012-03-15 75 views
1

访问活动我有一个看似简单的一个问题,但我无法弄清楚什么是对,最好的做法:)最佳实践从浏览

什么是最好的做法,以获得从查看,方法上活动即推出了查看

例如,我有一个布局的活动,其中包含一个按钮Textfield。当我点击按钮时,我想要调用我的活动上的方法,该方法使用某些值更新文本框。我来与多个解决方案:

1 - 内部类为OnClickListener直接在活动所以可以在活性MyActivity.this.updateTextField()的onClick方法,所述方法

2 - 为OnClickListener外部类中,我的onClick方法我可以做的:((MyActivity)的getContext())updateTextFie LD()

3 - 参考的活动OnClickListener上课的时候我实例是: myButton.setOnClickListener(新MyOnclickListener(MyActivity));

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

什么是Android上的最佳实践从查看告诉其Actitity的东西需要在活动做了什么?

谢谢!

回答

0

点击该按钮,虽然我主要是觉得自己结了内部类,还有其他的选择。 您可以创建类似下面的界面,让您的活动实现:

public interface UpdateableTextField { 
    public void updateTextField(); 
} 

现在我们要实现这个接口的活动。

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

​​

而在去年,在活动:

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 :) 
    } 
} 
+0

是的,这是解决方案3,我在做什么,但它感觉有点沉重的onclicklistener是不是它的活动?对于桌面/ Web应用程序来说,这很好,但对于要优化内存的Android,这是一个好习惯吗?例如,需要联系其活动的webview,我真的想在活动上执行mywebview.setMyListener(this),因为我的活动已经在View上用getContext()引用了吗?我正在寻找更优化的解决方案(通常使用的解决方案)。 – 2012-03-15 21:00:17

+0

通常使用的解决方案是您的头号解决方案。这是最简单的方法。 – MByD 2012-03-15 21:03:06

+0

好,所以没有其他“集成”解决方案,我认为我们可以轻松地使用SDK检索这些信息。谢谢。 – 2012-03-15 21:22:46

1

与onclickListener执行活动,并添加未实现的方法的onClick 只是检查视图以查看柜面您正在使用多个按钮

+0

It's比使用相同解决方案1,我希望能够重新使用代码。例如,在WebView上的onPageFinished上有同样的问题,我该如何联系这个webview的活动?有没有比我说的更好的解决方案? – 2012-03-15 20:45:44

+0

好的@Override public void onClick(View v){ //做一些东西 updateable.updateTextField(); } 这里查看你所得到的说法只是比较,如果v等于Button1的(你的按钮的名称),如果是的话,如果可见等于执行操作1到BUTTON2做其他动作只是比较按钮名称和重用 – 2012-03-15 20:49:34

+0

That's不是我的问题,我知道我可以直接在Activity上实现onclicklistener,这不是我想要的,因为我想让我的onclicklistener在一个单独的类(例如myclicklistener.java)中。 – 2012-03-15 20:54:08