调用'notifyDataSetChanged'后,setText方法不适用于listview中的editText

时间:2013-02-11 08:29:50

标签: android android-edittext settext notifydatasetchanged

我正在使用eclipse开发一个Android应用程序。我有一个列表视图,其中每行包含一个EditText。当我点击EditText时,我想要做两件事。

1:使用我的数据阵列中的文本重新加载所有EditText。

2:将单击的EditText的文本设置为常量字符串(例如“0”)。

为此我在EditText上使用了下面的onclicklisetner。

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        adapter.notifyDataSetChanged();//adapter is my arrayadapter of the listview
        EditText clickedText = (EditText)v;  
        clickedText.setText("0");
       }
 });

正如您所看到的,我正在使用'notifyDataSetChanged'方法重新加载listview中的EditTexts,并使用'setText'方法将单击的EditText文本设置为“0”。

但'setText'方法不起作用。如果我注释'adapter.notifyDataSetChanged()'行''setText'方法正在运行。

我还尝试通过在延迟后调用setText方法(检查notifyDataSetChanged是否正在启动新线程)但是失败来执行此操作。

如何在onClick方法中使用这两种方法。

先谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用其他方法来完成。

您可能正在使用ArrayList说mList设置ListView适配器。

现在,在列表视图的onItemClick侦听器中,您可以获得ListView中单击的项目的位置。在onClick()中,在arrayList的该位置设置值0,例如mList.set(position, 0)。然后调用notifyDataChanged()

答案 1 :(得分:0)

尝试:

所以这种行为的原因是当你调用adapter.notifyDataSetChanged()时,你的View V很有可能被回收,因此它不再引用被点击的那个。你真正想要做的是更改列表,以便在调用notifyDataSetChanged时,将相应地加载所有值。

请分享您的适配器代码。

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        //adapter is my arrayadapter of the listview
        //EditText clickedText = (EditText)v;  
        //clickedText.setText("0");

         //Do some thing to change the adapter data list.
         adapter.notifyDataSetChanged();
       }
 });