如何在单击Button时在listView中增加一个数字

时间:2015-03-18 14:18:56

标签: android listview

我是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:

&#13;
&#13;
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;
&#13;
&#13;

我的ViewHolder类:

public class ViewHolder {
TextView text1;
TextView text2;
ImageView button;

}

我总是遇到同样的问题,你能不能给我一些建议,或者帮我解决这个问题,谢谢

3 个答案:

答案 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;

然后更新喜欢/不喜欢事件中的值。