2015-07-11 146 views
0

Listview有一个默认图像,我将其替换为另一图像,当图像被选中时(如下所示 - onClickListener)。问题是当listView熄灭并且返回到View中时,替换deault图像的图像会恢复为默认图像。当Listview滚动时,自定义Listview中的图像正在被取消设置

public class BookViewCustomList extends ArrayAdapter<String>{ 
private final Activity context; 
private final ArrayList<String> chapter; 
private final ArrayList<String> verse; 
private final ArrayList<String> content; 
private final Integer[] imageId; 

public BookViewCustomList(Activity context, ArrayList<String> chapter, ArrayList<String> verse, Integer[] imageId, ArrayList<String> content) { 
    super(context, R.layout.custom_book_view_layout, chapter); 
    this.context = context; 
    this.chapter = chapter; 
    this.verse = verse; 
    this.imageId = imageId; 
    this.content = content; 
} 

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.custom_book_view_layout, null, true); 

    TextView txtChapter = (TextView) rowView.findViewById(R.id.textViewChapter); 
    txtChapter.setText(chapter.get(position)); 

    TextView txtVerse = (TextView) rowView.findViewById(R.id.textViewVerse); 
    txtVerse.setText(verse.get(position)); 

    //ImageView imageViewBookmark = (ImageView) rowView.findViewById(R.id.imageButtonBookmark); 
    //imageViewBookmark.setImageResource(imageId[position]); 

    TextView txtContent = (TextView) rowView.findViewById(R.id.textViewContent); 
    txtContent.setText(content.get(position)); 


    final ImageView imgView = (ImageView) rowView.findViewById(R.id.imageViewBookmark); 
    imgView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      imgView.setImageResource(R.drawable.bookmark_blue); 
     } 
    }); 

    return rowView; 
} 

}

那么如何留住已经作出了改变?谢谢!

+0

使用视图架模式http://codehenge.net/blog/2011/06/android-development-tutorial-asynchronous-lazy-loading-and-caching-of-listview-图片/ –

回答

0

你需要有自己的数据模型与检查或所选的项目,那么你就需要保持model.For示例编写模型适配器原样

public class Book{ 
private String chapter; 
private String verse; 
private String content; 
private int imageID; 
private boolean isChecked; 
} 

建立getter和setter方法也适用,并修改上述类型的适配器,如ArrayAdapter<Book>。 现在您可以修改您的getView()方法onClick()以使您的模型项目选中或取消选中,并相应地设置图像。

0

似乎你没有使用viewHolder模式。

试试这个

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    final ViewHolder holder; 
    if(view==null){ 
     holder = new ViewHolder(); 

    view = inflater.inflate(R.layout.custom_book_view_layout, viewGroup, false); 

    holder.txtChapter = (TextView) rowView.findViewById(R.id.textViewChapter); 
    holder.txtVerse = (TextView) rowView.findViewById(R.id.textViewVerse); 
    holder.txtContent = (TextView) rowView.findViewById(R.id.textViewContent); 
    //ImageView imageViewBookmark = (ImageView) rowView.findViewById(R.id.imageButtonBookmark); 
    holder.imgView = (ImageView) rowView.findViewById(R.id.imageViewBookmark); 
     view.setTag(holder); 
    }else{ 
     holder = (ViewHolder)view.getTag(); 
    } 
    holder.txtChapter.setText(chapter.get(position)); 
    holder.txtVerse.setText(verse.get(position)); 
    //imageViewBookmark.setImageResource(imageId[position]); 
    holder.txtContent.setText(content.get(position)); 

    holder.imgView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      holder.imgView.setImageResource(R.drawable.bookmark_blue); 
     } 
    }); 

    return view; 
} 
class ViewHolder { 
    TextView txtChapter, txtVerse, txtContent; 
    ImageView imgView; 
} 
+0

它崩溃。我得到NPE上运行上面的代码 – Jerry

+0

好吧,我gotch雅 从getview方法去除LaoutInflater并尝试在初始化吹气适配器构造函数 吹气= LayoutIflater.from(背景); –

相关问题