我有一个包含三个textview和一个imageview的列表视图。其中一个textview的可见性设置为GONE' GONE'在xml中。
然而,当我点击imageview时,我希望listview中的文字变得可见。这是有效的,但不是仅使该行上的textview可见,另一行的文本视图也显示。
当我点击该行时,如何仅使行的文本视图可见?
这是我的代码
public class Main {
public static void main(String[] args) {
Reiziger r1 = new Reiziger("Joost", "01-01-1994");
Reiziger r2 = new Reiziger("Hans", null);
ReizigerOracleDaoImpl i1 = new ReizigerOracleDaoImpl();
i1.alleReizigers.add(r1);
i1.alleReizigers.add(r2);
System.out.println(i1.alleReizigers);
}
}
}
注意:我已尝试使用ViewHolder模式并且问题仍然存在
答案 0 :(得分:1)
ListView
重新使用View
。别忘了。
这样,如果在任何位置设置任何属性,可能会在不同的位置产生类似的效果,因为最终会重复使用相同的视图。
在您的代码中,您可以看到:
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
// I just create a view if received view is null...
// In another words, just create a View with View.GONE if current is null
} else {
// Since some View are re-used.. they are not null
// If you don't set visibility again, it will keep last state (in another workds, View.VISIBLE)
}
};
因此,在使用ListView
时,您必须在View
期间恢复getView(int position)
的所有属性。
如果更改可见性,则必须跟踪哪个位置可见以及哪个位置不可见。然后,在getView()
期间,您再次设置正确的状态。
您必须对每个媒体资源执行此操作:setText()
,setVisibility()
,setClickable()
等等。您必须恢复在其他位置可能发生变化的所有内容。
所以,你可以保留一个单独的列表来跟踪哪一个是可见的(这只是一个例子):
public class CustomListAdapter2 extends ArrayAdapter<ObjectItem> {
private ObjectItem[] data = null;
private boolean[] viewVisibility = null;
public CustomListAdapter2(Activity context, ObjectItem[] data) {
...
this.data = data;
this.viewVisibility = new boolean[data.lenght];
}
public View getView(int position, View view, ViewGroup parent) {
...
final TextView textView = (TextView) view.findViewById(R.id.list_detail2);
if(viewVisibility[position]) {
textView.setVisibility(View.VISIBLE);
} else {
textView.setVisibility(View.GONE);
}
...
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setVisibility(View.VISIBLE);
viewVisibility[position] = true;
}
});
return view;
};
}
答案 1 :(得分:0)
您需要使用OnItemClickListener
,它会为您提供对回调方法中点击的View
的引用。
参考此处:https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html