如何在其OnClickListener的警报上获取View集

时间:2013-11-13 07:28:34

标签: android android-edittext textview onclicklistener

我的目标是在用户点击它时更改TextView的文本,并将其替换为用户输入的玩家名称。所以我添加了一个OnClickListener。所以点击时我会提示Dialog进行用户输入。

private void setPlayerName(TextView textView) {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Title");
    alert.setMessage("Enter Player1 Name");

    // Set an EditText view to get user input 
    final EditText inputText = new EditText(this);
    alert.setView(inputText);

    alert.setPositiveButton("Ok", new inputclickListener(textView));

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });

    alert.show();
}

现在,inputclickListener类的代码如下

class inputclickListener implements android.content.DialogInterface.OnClickListener {

    TextView textView;

    public inputclickListener(TextView textView){
        this.textView = textView;
    }


    @Override
    public void onClick(DialogInterface dialog, int which) {
        //String value = inputText.getText().toString();    //Here I need reference to inputtext
        if(value != null && value.length()>0) {
            textView.setText(value);
        }

    }

}

正如inputclickListener类中代码的注释中所提到的,我需要对inputText的引用,这是EditText视图。我的问题是,如果我们引用它Dialog(我认为这应该是Views / EditText父级,如果我错了,请纠正我),我怎样才能得到该引用?

2 个答案:

答案 0 :(得分:1)

对于这种情况,我会为侦听器使用匿名类来加快编码速度。

private void setPlayerName(final TextView textView) {
    AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Title");
    alert.setMessage("Enter Player1 Name");

    // Set an EditText view to get user input 
    final EditText inputText = new EditText(this);
    alert.setView(inputText);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int whichButton) {
            final String value = inputText.getText().toString();
            if(value != null && value.length()>0) {
                textView.setText(value);
            }
        }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });

    alert.show();
}

答案 1 :(得分:0)

TextWatcher添加到addTextChangedListener的{​​{1}},并将您在inputText上收到的任何数据传递给onTextChanged对象。