2015-04-28 4 views
0

У меня есть ListView, в котором есть кнопка в каждом элементе listview. Когда пользователь нажимает кнопку в каждой строке, я хочу, чтобы количество кликов кнопки в каждой строке было seperatelyWhen у меня есть счетчик, который увеличивается, когда пользователь нажимает кнопку . Но подсчет не является отдельным для каждой строки. Он просто увеличивается при нажатии любой кнопки независимо от строки.Как получить количество точек списка элементов списка в каждой строке?

Очевидно, есть кнопка добавления в каждой строке списка. При нажатии кнопки я хочу изменить каждую метку кнопки с подсчетом щелчка.

Код: метод

list = getListView(); 
      list.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         final int position, long id) { 
        // TODO Auto-generated method stub 



        TextView add = (TextView) view 
           .findViewById(R.id.btn_add); 
         DishCount = (TextView) view 
           .findViewById(R.id.textDishCount); 


         ((TextView) view 
         .findViewById(R.id.btn_add)).setOnClickListener(new OnClickListener() { 

          @Override 
          public void onClick(View v) 
          { 
           try 
           { 
            counter.add(position,counter.get(position)+1); 
            } 

           catch (Exception e) 
           { 
            e.printStackTrace(); 
            counter.add(position, 1); 
            } 


           totalcount= counter.get(position); 
           Toast.makeText(getApplicationContext(),"Value is "+totalcount, Toast.LENGTH_SHORT).show(); 

           DishCount.setVisibility(View.VISIBLE); 
           DishCount.setText(String.valueOf(totalcount)); 



          } 
         }); 

        } 


      }); 

обновления: класс

private void updateView(int index){ 

      View v = list.getChildAt(index - 
       list.getFirstVisiblePosition()); 

      if(v == null) 
       return; 

      count++; 
      TextView someText = (TextView) v.findViewById(R.id.textDishCount); 
      someText.setVisibility(View.VISIBLE); 

      someText.setText(String.valueOf(count)); 
     } 

адаптера:

public class RestaurantSubMenuListAdapter extends ArrayAdapter<String> { 

private final Activity context; 

private final ArrayList<Bitmap> dishImagesRounded; 
private final String[] DishName; 
private final String[] DishDescription; 
private final String[] DishPrice; 
Integer count; 
TextView itemCount; 
Typeface tf,tfb; 

public RestaurantSubMenuListAdapter(Activity context,ArrayList<Bitmap> dishImagesBitmapArray, String[] dishNameArray, 
     String[] dishDescriptionArray, String[] dishPriceArray, Typeface tf, Typeface tfb) 
{ 
    super(context, R.layout.restaurant_menu_list_item,dishNameArray); 

    this.context=context; 
    this.dishImagesRounded=dishImagesBitmapArray; 
    this.DishName=dishNameArray; 
    this.DishDescription=dishDescriptionArray; 
    this.DishPrice=dishPriceArray; 
    this.tf= tf; 
    this.tfb=tfb; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View v = convertView; 
final ViewHolder h; 
if(v == null){ 
    v=inflater.inflate(R.layout.restaurant_menu_list_item, parent,false); 
    h = new ViewHolder(); 
    h.DishName = (TextView)v.findViewById(R.id.textDishName); 
    h.DishDescription = (TextView)v.findViewById(R.id.textDishDescription); 
    h.DishPrice = (TextView)v.findViewById(R.id.textDishPrice); 
    h.AddButton = (TextView)v.findViewById(R.id.btn_add); 

    h.ImageDish = (ImageView) v.findViewById(R.id.imageDish); 
    h.DishCount = (TextView) v.findViewById(R.id.textDishCount); 
    h.AddButton = (TextView) v.findViewById(R.id.btn_add); 



    v.setTag(h); 
}else 
{ 
    h = (ViewHolder) v.getTag(); 
} 

h.DishName.setTypeface(tfb); 
h.DishDescription.setTypeface(tf); 
h.DishPrice.setTypeface(tfb); 
h.AddButton.setTypeface(tf); 
h.DishCount.setTypeface(tf); 
h.DishName.setText(DishName[position]); 
h.DishDescription.setText(DishDescription[position]); 
h.DishPrice.setText("$"+DishPrice[position]); 
h.ImageDish.setImageBitmap(this.dishImagesRounded.get(position)); 

h.ImageDish.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     Intent myIntent = new Intent(context, 
       ActivitySelectIngredients.class); 
     myIntent.putExtra("TableNumber",23); 
     context.startActivity(myIntent); 


    } 
}); 

/*h.AddButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     String tag = (String)v.getTag(); 

     Toast.makeText(context, tag, Toast.LENGTH_SHORT).show(); 
     h.DishCount.setVisibility(View.VISIBLE); 
     notifyDataSetChanged(); 

     //count++; 



    } 
});*/ 

return v; 
} 

/** 
* to stop recycling of listview items 
*/ 
@Override 
public int getViewTypeCount() { 
    return getCount(); 
} 

/** 
* to stop recycling of listview items 
*/ 
@Override 
public int getItemViewType(int position) { 
    return position; 
} 

private static class ViewHolder{ 
TextView DishName,DishDescription,DishPrice,AddButton,DishCount; 
ImageView ImageDish; 

} 
+0

Добавить переменную, называемую 'count' для каждой строки в структуре данных или держателе, который вы используете – KOTIOS

+0

Можете ли вы рассказать мне, как это сделать? Я новичок в андроиде. – CuckooMarianne

+0

post полный код – KOTIOS

ответ

0

вам нужно сделать еще один список или массив и сохранить счетчики. у вас не может быть одного счетчика для всех строк

0

Вы можете использовать статический ArrayList настраиваемого типа и использовать его для хранения количества кликов в соответствующей позиции.

Ниже приведен код объекта, который вы можете использовать.

public class ItemCount { 
    int position; 
    int count; 
} 
0
  1. Добавить: массив структура данных или ArrayList:

    ArrayList<Integer> count=new ArrayList<Integer>();

  2. Добавить граф в список внутри onClickLister: list.setOnItemClickListener

    ArrayList<Integer> count = new ArrayList<Integer>(); 
    try { 
        count.add(position, count.get(position) + 1); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 
    
  3. Получить общее количество позиции в позиции n:

    int totalcount= count.get(n);

+0

выдает исключение в count.add (position, count.get (position) +1); – CuckooMarianne

+0

Зачем? – KOTIOS

+0

IndexOutOfBoundsException at count.add (position, count.get (position) +1); – CuckooMarianne

0

Просто сделайте другое ArrayList и увеличивать свой счет одних и тех же позиций.

Смежные вопросы