listview getChildAt()不适用于imageview?

时间:2014-01-01 08:09:40

标签: android listview

我想像自定义列表视图中的单选按钮一样使用imageview,所以我使用了for循环和getChildAt(position)但是当我向下滚动时它不能很好地改变imageview图像src。

这是我的代码:

lvChooseReader.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, final int position, long id) {
                            for (int i = 0; lvChooseReader.getLastVisiblePosition() - lvChooseReader.getFirstVisiblePosition() > i; i++) {

 View childView = lvChooseReader.getChildAt(i);
               ImageView myImage= (ImageView) childView.findViewById(R.id.ivTest);

                if (i == position) {
                   rr.setImageDrawable(getResources().getDrawable(R.drawable.check_mark_default));
                }else {
                    rr.setImageDrawable(getResources().getDrawable(R.drawable.check_mark_selected));
                }
            }
            lvChooseReader.invalidateViews();
       }
 });

或者任何人都可以给我一个链接,点击项目点击而不是点击单选按钮...

2 个答案:

答案 0 :(得分:0)

lvChooseReader.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, final int position, long id) {
                            for (int i = lvChooseReader.getFirstVisiblePosition(); lvChooseReader.getLastVisiblePosition() > i; i++) {

 View childView = lvChooseReader.getChildAt(i);
               ImageView myImage= (ImageView) childView.findViewById(R.id.ivTest);

                if (i == position) {
                   rr.setImageDrawable(getResources().getDrawable(R.drawable.check_mark_default));
                }else {
                    rr.setImageDrawable(getResources().getDrawable(R.drawable.check_mark_selected));
                }
            }
            lvChooseReader.invalidateViews();

尊重是:

在此代码中,i的值将介于第一个可见项目和最后一个可见项目之间,在您的情况下,i的值介于on和总可见项目之间。

例如:

如果项目2-3-4-5可见,我应该是1-2-3-4(列表视图中这些项目的位置)。 在你的情况下它是0-1-2-3

答案 1 :(得分:-1)

我通过使用静态值解决了我的问题:

我在包含我的listview

的dialogfragment中添加了这个静态变量
static int selectedReaderId;

对于listview中的onItemClick,我添加:

ChooseReader reader = chooseReaderArrayList.get(position);
selectedReaderId=reader.getReaderID();
lvChooseReader.invalidateViews();

然后在我的getview里面的自定义适配器中添加这个

final ChooseReader chooseReader = readers.get(position);
if (chooseReader.getReaderID()==ChooseReaderDialog.selectedReaderId){
holder.ivTest.setImageDrawable(context.getResources().getDrawable(R.drawable.check_mark_default));
}else {    holder.ivTest.setImageDrawable(context.getResources().getDrawable(R.drawable.check_mark_selected));
}