android访问视图与创建不同的类

时间:2013-06-05 02:32:58

标签: java android xml

首先,我很抱歉,因为我还是Android开发的初学者。 我的问题:我可以使用其他类访问视图吗?例如,这是我的主要活动代码:

(XML)     

<EditText 
    android:id="@+id/something_dummy"
    android:layout_width="match_parent"
    android:layout_height="50dip"
    />

(JAVA)

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Controller controller = new Controller();
    controller.setEmptyEditText();



}

}

Controller.java

import android.app.Activity;
import android.widget.EditText;

public class Controller extends Activity {

public Controller() {
    // TODO Auto-generated constructor stub
}

public void setEmptyEditText(){
    EditText et = (EditText) findViewById(R.id.something_dummy);
    et.setText("");
}

}

当我运行此应用程序时,我收到错误并导致崩溃。 我想知道我是否可以对视图(在本例中为editText)进行处理,而无需在主活动类中编写它。

1 个答案:

答案 0 :(得分:0)

是的,您可以从mainActivity类外部访问视图。但是,这实际上取决于你想做什么。例如,您可以定义一个自定义的editText(例如,您需要一个可以通过一个函数调用清空的editText)。

public class myEditText extends EditText{
  public myEditText(Context context){
    super(context);
  }

  public myEditText(Context context, AttributeSet attrs){
    super(context, attrs);
  }

  public myEditText(Context context, AttributeSet attrs, int defStyle){
    super(context, attrs, defStyle);
  }

  public setEditTextEmpty(){
    setText("");
  }

现在,在mainActivity中,您可以访问自定义editText:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myEditText et = (myEditText) findViewById(R.id.something_dummy);
    et.setEditTextEmpty();

}

}

另一方面,在Android中,一个Activity更有可能扮演控制器的角色,而editText(以及任何其他视图)则是显示内容的简单哑视图。以下是一些关于如何在Android中执行控制器/视图功能的非常好的文章:

http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/

http://mindtherobot.com/blog/675/android-architecture-message-based-mvc/