1

我有 ListView,上面有 8 个(4 个可见的)列表项。每个视图包含一个 TextView 和一个 ImageView(最初设置为透明)。现在正在尝试从 onItemClick 方法将 img 设置为 imageView。它对我来说工作正常,但是当我向下滚动其他一些视图时也会产生影响。例如,如果我选择第 0 个位置项目,则第 0 个和第 4 个位置视图都设置为相同的 img。我该如何解决这个问题。

爪哇代码:

list.setAdapter(new SimpleAdapter(this,
            application.distanceList, R.layout.drop_down_view, from, to));
list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View v, int arg2,
                long arg3) {
            try {
                ((ImageView) temp.findViewById(R.id.ddviv))
                        .setImageResource(android.R.color.transparent);
            } catch (NullPointerException e) {

            }
            ((ImageView) v.findViewById(R.id.ddviv))
                    .setImageResource(R.drawable.drop_sel);
            temp = v;}
    });
4

2 回答 2

0

您必须在方法中使用带有s的自定义适配器(扩展BaseAdapter是一个不错的选择)。单击时,您会更改一些属性并调用.ViewHoldergetView()notifyDataSetChanged()

如果你不知道如何实现自定义适配器,谷歌有很多 tuts =)

于 2012-07-19T10:44:14.603 回答
0

从 的行中设置这些图像的另一个选项ListView是进行一些数据调整并使用SimpleAdapter.ViewBinder. 我不知道你是如何为行视图设置数据的(我看不到你在fromandto数组中有什么)或者你在里面有什么application.distanceList所以这里是一个小例子。首先,在每个Mapapplication.distanceList对应于ListView一行)中,您必须添加如下条目:

map.put("position", "x"); // where x is the list row number(for the first Map in application.distanceList x will be 0, for the second Map in application.distanceList x will be 1 etc)

您将"position"from数组中包含 ,并且与此相对应,"position"您将来ImageView自行布局的 id 放入to数组中。

接下来,您必须添加一个SimpleAdapter.ViewBinder来绑定ListView行中的图像(这将处理ListView的回收机制):

mAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {

            @Override
            public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
                            // view is the ImageView from the row layout
                            // data is the x from the position column
                if (view.getId() == R.id.imageView1) {
                    Integer rowNumber = Integer.parseInt((String) data);
                                    // below is the explanation for mImageIds
                    ((ImageView) view).setImageResource(mImageIds[rowNumber]);
                    return true;
                }
                return false;
            }
        });

mImageIds是一个数组ints,它将保存 的行的可绘制对象的id ListView

// a field in your class
private int[] mImageIds = new int[8]; // you said you had 8 rows

//.. in the onCreate method initialize the mImageIds array

    for (int j = 0; j < 8; j++) {
        mImageIds[j] = R.drawable.ic_launcher;// a default image(you could use android.R.color.transparent for empty)
    }

最后在onItemClick回调中:

public void onItemClick(AdapterView<?> arg0, View v, int arg2,
                long arg3) {
       mImageIds[position] = android.R.drawable.btn_minus; // the desired image
       mAdapter.notifyDataSetChanged();
}

这听起来更复杂,希望您了解原理,另一种解决方案是像其他用户已经说过的那样构建一个自定义适配器。

于 2012-07-19T12:26:32.330 回答