我是Android新手,我正在开发一个用户可以喜欢或不喜欢帖子的应用,当用户不喜欢帖子喜欢的号码时 - 如果用户喜欢数字++。
问题是,当我按下按钮时它会起作用,但它对其他一些物品不起作用,当我向下或向上滚动时,我会丢失信息,并且它会混合在其他物品上
我在列表视图中使用适配器视图,如下所示:
public adapter(Context context, ArrayList<statisticitem> questionaires) {
super(context, 0, questionaires);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final statisticitem c = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom, parent, false);
}
TextView text1 = (TextView) convertView.findViewById(R.id.textView1);
final TextView text2 = (TextView) convertView.findViewById(R.id.textView2);
TextView text3 = (TextView) convertView.findViewById(R.id.textView3);
ImageView like = (ImageView) convertView.findViewById(R.id.imageView1);
text1.setText(c.getIdQuestion());
like.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
likes++;
text2.setText("likes :"+likes);
}
});
return convertView;
}
}
我有Listview的主要活动:
ListView list1 = (ListView) findViewById(R.id.listView1);
lists = new ArrayList<statisticitem>();
for (int i=0;i<10;i++) {
statisticitem s = new statisticitem();
s.setIdQuestion("Question"+i);
lists.add(s);
}
adapter adapter = new adapter(MainActivity.this, (ArrayList<statisticitem>) lists);
list1.setAdapter(adapter);
}
使用ViewHolder:
public class adapter extends ArrayAdapter<statisticitem> {
int likes;
public adapter(Context context, ArrayList<statisticitem> questionaires) {
super(context, 0, questionaires);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom, parent, false);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.textView1);
holder.button = (ImageView) convertView.findViewById(R.id.imageView1);
holder.text2 = (TextView) convertView.findViewById(R.id.textView2);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
final statisticitem s = getItem(position);
if (s !=null)
{
holder.text1.setText(s.getIdQuestion());
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
likes++;
holder.text2.setText("yasser");
}
});
}
return convertView;
}
}
&#13;
我的ViewHolder类:
public class ViewHolder {
TextView text1;
TextView text2;
ImageView button;
}
我总是遇到同样的问题,你能不能给我一些建议,或者帮我解决这个问题,谢谢
答案 0 :(得分:0)
您需要使用ViewHolder模式。 ListView不断回收其视图,数据变得疯狂。请参考:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
答案 1 :(得分:0)
您必须将值存储在正确的位置。在你的情况下,我认为在统计项目中。因此,通过项目位置获取与项目对应的统计项目并将其存储在那里。当您更新视图时,也会在那里检索它。
viewHolder模式很好,但不能解决您的问题。考虑一下您的数据结构。 “喜欢”变量属于哪个对象?你在哪里保存并从中检索它以获得正确的值。它应该与你的观点无关。
答案 2 :(得分:-1)
您可以为喜欢/不喜欢计数
创建一个静态变量private static int likeCount = 0;
然后更新喜欢/不喜欢事件中的值。