我在ListView
添加了3个项目。每个项目都说“测试”。当我点击某个项目时,我会清除该项目的文本。但是,当我在“监视”日志中检查变量时,即使我删除了文本,该项仍然被命名为“测试”。
观看日志:
adapter2.getItem(1) = {java.lang.String@830045070536}"Test"
list.getItemAtPosition(1) = {java.lang.String@830045070536}"Test"
我希望ListView
更新,并在点击后将项目设为空白
例如,手表日志应如下所示:
adapter2.getItem(1) = {java.lang.String@830045070536}""
list.getItemAtPosition(1) = {java.lang.String@830045070536}""
有人可以告诉我为什么我的这种情况正在发生并提供解决方案吗?
已编辑的代码
public class ListView2 extends Fragment {
ListView list;
ArrayAdapter<String> adapter2;
List<String> array_list;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.listview2, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
array_list = new ArrayList<String>();
array_list.add("Test");
array_list.add("Test");
array_list.add("Test");
//Build Adapter
adapter2 = new ArrayAdapter<String>(getActivity(), R.layout.items, array_list);
//Configure the list view
list = (ListView) getActivity().findViewById(R.id.listview2);
list.setAdapter(adapter2);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView txt = (TextView)view.findViewById(R.id.txt);
if(txt.getText().toString().equals("Test")) {
txt.setText("");
}else{
txt.setText("Test");
}
adapter2.notifyDataSetChanged();
}
});
}
}
答案 0 :(得分:2)
尝试直接更新TextView并不是一个好方法。您可以使用remove()和insert()方法来更新ArrayAdapter。如需参考,请检查here,
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(adapter2.getItem(position).equals("Test")) {
adapter2.remove("Test");
adapter2.insert("", position);
}else{
adapter2.remove("");
adapter2.insert("Test", position);
}
adapter2.notifyDataSetChanged();
}
});
<强>更新强>
这是更新ArrayAdapter的另一种方法,无需删除和插入相同位置的条目,如评论中所述。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(arrayList.get(position).equals("Test")) {
arrayList.set(position, "");
}else{
arrayList.set(position, "Test");
}
adapter2.notifyDataSetChanged();
}
}
希望它对你有用。
答案 1 :(得分:0)
在项目单击列表器上,您必须获取行的视图,使用该行对象并查找该行中的视图,即您的案例中的textview。将该视图的文本设置为空白,并更改该位置上的数据集项,以便视图和数据同步。这样就无需更新整个列表并节省时间。
如果上述任何一点不明确,请提及。