我正在使用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方法中使用这两种方法。
先谢谢。
答案 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();
}
});