【发布时间】:2016-03-23 10:12:27
【问题描述】:
在 CustomListAdapter 中,我有一个增量按钮和一个 textview 来显示其值,当我单击增量按钮时,我会增加值,然后将其存储到 sqlite db,然后我获取该值,然后将其设置为相应的 textview。
但是当我向下滚动时,它的值会变为初始值,即“0”
我之前提到过一个类似的问题,他们建议使用我也使用过但没有帮助我的viewholder。
我会很感激任何指导我如何做到这一点的人。
这是 CustomListAdapter 代码:
public class CustomListAdapter2 extends BaseAdapter {
private SQLiteHandler db;
// HashMap<Integer,Integer> quantity = new HashMap<Integer,Integer>();
private Activity activity;
private LayoutInflater inflater;
private List<com.example.malli.myapplication.model.Movie> movieItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
private EventBus bus = EventBus.getDefault();
public CustomListAdapter2(Activity activity, List<Movie> movieItems) {
this.activity = activity;
this.movieItems = movieItems;
Log.d("size",String.valueOf(movieItems.size()));
db = new SQLiteHandler(activity.getApplicationContext());
}
@Override
public int getCount() {
return movieItems.size();
}
@Override
public Object getItem(int location) {
return movieItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolderItem viewHolder = null;
if (inflater == null) {
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_row2, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
viewHolder = new ViewHolderItem();
viewHolder.thumbNail = (NetworkImageView) convertView
.findViewById(R.id.thumbnail);
viewHolder.title=(TextView)convertView.findViewById(R.id.title);
viewHolder.rating=(TextView)convertView.findViewById(R.id.rating);
viewHolder.genre=(TextView) convertView.findViewById(R.id.genre);
viewHolder.addbutton=(Button)convertView.findViewById(R.id.addbutton);
viewHolder.qty = (TextView) convertView.findViewById(R.id.qty);
convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolderItem) convertView.getTag();
}
final Integer uniqueKey = Integer.valueOf(position);
final Movie m = movieItems.get(position);
// store the holder with the view.
// convertView.setTag(viewHolder);
for(int j =0;j<20;j++){
String val1=db.getUser(j);
if(val1 != null) {
viewHolder.qty.setText(db.getUser(j));
}
else{
viewHolder.qty.setText("0");
}
}
final ViewHolderItem finalViewHolder = viewHolder;
viewHolder.addbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = finalViewHolder.qty.getText().toString();
if(val == null)
val= String.valueOf(1);
else {
val = String.valueOf(Integer.valueOf(val) + 1);
Log.d("val",String.valueOf(val));
}
db.add(m.getTitle(), String.valueOf(val),
String.valueOf(m.getRating1(),String.valueOf(m.getRating1()));
String val2 = db.getUser(m.getRating1());
finalViewHolder.qty.setText(db.getUser(m.getRating1()));
db.addtotalcost(String.valueOf(
Integer.valueOf(val)*m.getRating1()));
String totalcost = db.getTotalCost2();
EventBus.getDefault().post(new
ChargingEvent(Integer.valueOf(totalcost)));
}
});
// thumbnail image
viewHolder.thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);
// title
viewHolder.title.setText(m.getTitle());
// rating
viewHolder.rating.setText("Cost: " + String.valueOf(m.getRating1()));
// genre
String genreStr = "";
for (String str : m.getGenre()) {
genreStr += str + ", ";
}
genreStr = genreStr.length() > 0 ? genreStr.substring(0,
genreStr.length() - 2) : genreStr;
viewHolder.genre.setText(genreStr);
// release year
//year.setText(String.valueOf(m.getYear()));
return convertView;
}
}
【问题讨论】:
-
不太确定这到底会影响到哪里,但是您从
movieItems获得电影,然后对其进行一些工作并在数据库上进行一些工作,在此阶段列表movieItems仍然有效@position 项的旧数据,您需要 1 刷新此列表(从您获得它的位置重新加载)2 更新m中的值并添加它到movieItems在同一位置movieItems.set(position, m);[在m中设置新值后执行此操作] -
@yazan 我没明白
-
你说的值,是在Movie对象中吗?如果是,是哪一个?
-
@yazan 该值不在电影对象中
-
@yazan 忘记回复............谢谢
标签: android listview custom-lists