0

Я разрабатываю приложение, в котором у меня есть вид списка с пользовательским адаптером. Я привязываю ArrayList к пользовательскому адаптеру. Адаптер имеет четыре вида изображения, а прослушиватель onclick применяется к каждому представлению изображения в режиме просмотра.Android: При щелчке в адаптере дайте неправильную позицию

Я наполнение списка массива из двух других ArrayList на основании условия, как:

/* Condition 1 */ 
for(int i = 0; i < arrayList.size(); i++){ 
    if(a == id){ 
     arrayList1.add(arrayListOther.get(i)); 
    } 
} 

/* condition 2 */ 
for(int i = 0; i < arrayList.size(); i++){ 
    arrayList1.add(arrayList.get(i)); 
} 

Когда мой Список_массивов один заселяет только из условия 2, то по щелчку 1 пункта списка положения он дает, 0. Но когда мой arraList заполняется из условий 1 и 2, то тот и тот же 1-й элемент заполняется из массиваListOther и остаётся от arrayList из условия 2, то время, щелкнув по 1-му элементу списка, оно дает позицию как 1.

В мой адаптер:

public class ViewHolder { 
    ImageView image1; 
    ImageView image2; 
    ImageView image3; 
    ImageView image4; 
} 

public View getView(final int position, View view, ViewGroup parent) { 
    if (view == null || view.getTag() == null) { 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.listview_adapter_layout, null); 

     holder.image1 = (ImageView) view.findViewById(R.id.imageView1); 
     holder.image2 = (ImageView) view.findViewById(R.id.imageView2); 
     holder.image3 = (ImageView) view.findViewById(R.id.imageView3); 
     holder.image4 = (ImageView) view.findViewById(R.id.imageView4); 

     view.setTag(holder); 
    } else { 
     holder = (ViewHolder) view.getTag(); 
    }   

    // Some code here 
    // Also having Async task  

    if(flag == 2){ 
     holder.image1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) {   
       // Also having Async task 
       Log.d("Position",""+position); 
      }  
     }); 
    } 

    // Some code here 
} 

Что не так в этом, я не получаю. Пожалуйста, предложите мне, что мне делать.

+0

Сколько строк у см в ListView? – Fahim

+0

Размер одной строки очень большой, поэтому я могу видеть 1 и половину второй строки несколько раз, а некоторое время два и некоторое время по одной строке за раз зависит от данных и размера изображений. –

ответ

0

Добавить тег ImageView, как показано ниже:

 holder.image1 = (ImageView) view.findViewById(R.id.imageView1); 
     holder.image2 = (ImageView) view.findViewById(R.id.imageView2); 
     holder.image3 = (ImageView) view.findViewById(R.id.imageView3); 
     holder.image4 = (ImageView) view.findViewById(R.id.imageView4); 
     holder.image1.setTag(position); 

    holder.image1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) {   
      // Also having Async task 
       Integer index = (Integer) v.getTag(); 
     } 
    }); 
+0

Должен ли я использовать индекс в месте позиции? –

+0

индекс такой же, как и позиция в onClickListerner, вы можете рассматривать это как свою позицию и распечатывать и видеть – KOTIOS

+0

Спасибо за ваше предложение. Меня устраивает. –

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