findViewById使用OnClickListener接口的OnClick方法的参数返回null

时间:2013-04-03 23:59:28

标签: java android

我的代码:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    Button btn = (Button) findViewById(R.id.btn_ok);

    btn.setOnClickListener(new Click());

}

我的班级女巫实现了OnClickListener

但是在方法上点击“点击”类..参数查看v ..不行。 使用方法findViewById ..总是返回null:(

任何帮助?

    public class Click implements View.OnClickListener
{       
    @Override
    public void onClick(View v) {       
        TextView view = (TextView) v.findViewById(R.id.resultado);
        EditText textoEdit = (EditText) v.findViewById(R.id.campo_texto);

        String texto = textoEdit.getText().toString();
        view.setText("Obrigado " + texto);  
    }
}

(对不起我的英文)

2 个答案:

答案 0 :(得分:3)

参数View v引用您的按钮。该按钮视图不包含R.id.resultado的元素。试试v.getRootView()

答案 1 :(得分:1)

按钮没有任何子视图,因此当您调用findViewById时,将找不到任何视图。 View v参数是生成触摸事件的视图。如果您想与布局中的TextViewEditText对话,您应该在onCreate中找到它们并将它们存储为类成员。

尝试:

TextView mTexto;
EditText mTextoEdit;

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

    Button btn = (Button) findViewById(R.id.btn_ok);
    btn.setOnClickListener(new Click());

    mTexto= (TextView) findViewById(R.id.resultado);
    mTextoEdit = (EditText) findViewById(R.id.campo_texto);
}

在你的听众中:

public class Click implements View.OnClickListener
{       
    @Override
    public void onClick(View v) {       
        String texto = mTextoEdit.getText();
        mTexto.setText("Obrigado " + texto);  
    }
}