Android 如何更改AlertDialog中的值?

Android 如何更改AlertDialog中的值?,android,android-listview,textview,android-alertdialog,Android,Android Listview,Textview,Android Alertdialog,只要一个EditText和ListView很难理解,我就尝试了另一种解决方案:一个ListView和TextView一起,当你点击一个,我就可以用一个监听器(父ListView上的一个onimclicklistener)我打开一个警报对话框 问题:当我按下警报对话框上的OK按钮时,我希望聚焦的文本视图获取警报对话框的编辑文本的文本值,但它不起作用,他保留相同的文本值。关于活动: listView.setOnItemClickListener(new OnItemClickList

只要一个
EditText
ListView
很难理解,我就尝试了另一种解决方案:一个
ListView
TextView
一起,当你点击一个,我就可以用一个监听器(父
ListView
上的一个
onimclicklistener
)我打开一个
警报对话框

问题:当我按下
警报对话框
上的OK按钮时,我希望聚焦的
文本视图
获取警报对话框的
编辑文本
的文本值,但它不起作用,他保留相同的文本值。关于活动:

        listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int pos, long id){

            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

            id ++;
            t = new TextView(activity);
            t = (TextView) v;

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

            alert.setTitle("Title");
            alert.setMessage("Message");

            // Set an EditText view to get user input 
            final EditText input = new EditText(activity);
            input.setText(t.getText());
            alert.setView(input);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    //Changer la valeur dans la base et dans la liste


                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS,0);

                    t.setText(input.getText());

                    System.out.println("input avant : " + t.getText());
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });


            alert.show();
        }
    });
listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(适配器视图a、视图v、内部位置、长id){
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
imm.toggleSoftInput(InputMethodManager.SHOW\u强制,0);
id++;
t=新文本视图(活动);
t=(文本视图)v;
AlertDialog.Builder alert=新建AlertDialog.Builder(活动);
警报。设置标题(“标题”);
警报。设置消息(“消息”);
//设置EditText视图以获取用户输入
最终编辑文本输入=新编辑文本(活动);
input.setText(t.getText());
alert.setView(输入);
alert.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
//改变你的生活,改变你的生活
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
imm.toggleSoftInput(InputMethodManager.HIDE\u不总是,0);
t、 setText(input.getText());
System.out.println(“输入前卫:+t.getText());
}
});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(对话框接口对话框,int whichButton){
//取消了。
}
});
alert.show();
}
});
我想这个代码足够让你知道我的代码有什么问题。只是想让你知道:

  • ListView
    和t(
    TextView
    )被声明为活动类上的私有变量
  • 有一个
    适配器
    类可以自动构建
    文本视图
    列表
  • 如果我在
    ListView
    侦听器上更改
    EditText
    的值,它会工作,但在对话框alert listener中,它不会工作

询问您是否需要更多信息。

我不知道您是如何构建适配器的,因此我将猜测答案。您必须将文本放入适配器数据中(例如,在您提供给适配器的
ArrayList
中),并在适配器上调用
notifyDataSetChanged()

//ArrayList field on which your adapter is based ?!?(if you used this)
private ArrayList<String> items;

 listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, final View v, int pos, long id){

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

            alert.setTitle("Title");
            alert.setMessage("Message");
            final EditText input = new EditText(activity);
            input.setText(t.getText());
            alert.setView(input);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    items.set(pos, input.getText().toString());
                    adapterObject.notifyDataSetChanged();  // the adapter you set in the listView.setAdapter();
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });


            alert.show();
        }
    });
//适配器所基于的ArrayList字段?!?(如果您使用此选项)
私有ArrayList项;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、最终视图v、内部位置、长id){
AlertDialog.Builder alert=新建AlertDialog.Builder(活动);
警报。设置标题(“标题”);
警报。设置消息(“消息”);
最终编辑文本输入=新编辑文本(活动);
input.setText(t.getText());
alert.setView(输入);
alert.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
items.set(pos,input.getText().toString());
adapterObject.notifyDataSetChanged();//在listView.setAdapter()中设置的适配器;
}
});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(对话框接口对话框,int whichButton){
//取消了。
}
});
alert.show();
}
});

我不知道您是如何构建适配器的,因此我将猜测答案。您必须将文本放入适配器数据中(例如,在您提供给适配器的
ArrayList
中),并在适配器上调用
notifyDataSetChanged()

//ArrayList field on which your adapter is based ?!?(if you used this)
private ArrayList<String> items;

 listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, final View v, int pos, long id){

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

            alert.setTitle("Title");
            alert.setMessage("Message");
            final EditText input = new EditText(activity);
            input.setText(t.getText());
            alert.setView(input);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    items.set(pos, input.getText().toString());
                    adapterObject.notifyDataSetChanged();  // the adapter you set in the listView.setAdapter();
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });


            alert.show();
        }
    });
//适配器所基于的ArrayList字段?!?(如果您使用此选项)
私有ArrayList项;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、最终视图v、内部位置、长id){
AlertDialog.Builder alert=新建AlertDialog.Builder(活动);
警报。设置标题(“标题”);
警报。设置消息(“消息”);
最终编辑文本输入=新编辑文本(活动);
input.setText(t.getText());
alert.setView(输入);
alert.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
items.set(pos,input.getText().toString());
adapterObject.notifyDataSetChanged();//在listView.setAdapter()中设置的适配器;
}
});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(对话框接口对话框,int whichButton){
//取消了。
}
});
alert.show();
}
});

哦,我的上帝,你的权利。这就像我做了一个自定义适配器,但不知道如何使用它。无论如何,我从android开始。谢谢@SebastienFERRAND如果您只需要一行中包含
TextView
,那么最好使用一个简单的
ArrayAdapter