我的主要活动是:
listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int position,
long id) {
TextView wrapper = (TextView) v.findViewById(R.id.title);
VideoModel o = (VideoModel) videoAdapter.getItem(position);
wrapper.setText(o.title);
}
});
此代码(正如您所猜测的)会更改列表视图行的文本视图(这是一种布局)。 问题是,由于某种原因,当我点击第一行时,文本会发生变化,但第三行也会发生变化(文本相同)。
有什么难事吗?
如果您想查看整个代码,请参阅How to call method from activity to change layout?
答案 0 :(得分:0)
请勿更改setOnItemClickListener中的视图,而是更改数据并通知适配器,以便适配器更改您的UI。
示例:
模型
class VideoModel {
public String title;
public String videoUrl;
public String imageUrl;
public boolean isTitleVisible;
}
适配器
public class VideoAdapter extends BaseAdapter{
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
VideoLayout view;
if (convertView == null) {
view = (VideoLayout) LayoutInflater.from(context).inflate(R.layout.video, parent, false);
}else{
view = (VideoLayout) convertView;
}
VideoModel item = (VideoModel) getItem(position);
if (item != null) {
view.prepare(item);
if(item.isTitleVisible){
view.changeTitle("");
}
}
return view;
}
}
点击监听器:
@Override
public void onItemClick(AdapterView<?> av, View v, int position,
long id) {
videoItems.get(position).isTitleVisible=! videoItems.get(position).isTitleVisible;
videoAdapter.notifyDatasetChange();
}
这只是一个更改视图模型的示例,只是通知适配器更改onITemClick中的视图