列表视图项目单击应用于其他项目

时间:2013-12-01 20:40:10

标签: java android

我的主要活动是:

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?

1 个答案:

答案 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中的视图