2015-07-30 2 views
1

У меня возникает одна проблема при добавлении ListView в макет. Я реализовал один ListView на одной странице, где мы получаем список элементов, в том случае, когда мы нажимаем на какой-либо ListMember, он меняет свой цвет и снова нажимает на него, это изменит его на предыдущий цвет. Теперь представьте, из-за высоты элемента один экран может содержать максимум 5 Перечислите элементы, чтобы следующий член увидел, что вам нужно прокрутить вниз.My ListView не работает должным образом

теперь представте члены Список являются

Пункт 1

Пункт 2

Пункт 3

Пункт 4

Пункт 5

Пункт 6

Элемент 7

Среди них можно видеть только 5 предметов за один раз, теперь, когда я нажимаю «Элемент 1» (первый член первых пяти членов), его цвет меняется (скажем, БЕЛАЯ ЗЕЛЕНУЮ), но когда я прокрутите вниз, я вижу, что «Пункт 6» (первый член из первых пяти участников) также изменил свой цвет (на ЗЕЛЕНЫЙ), и когда я нажимаю «Пункт 6», на этот раз setOnItemClickListener для этого участника фактически срабатывает и пытается изменить его цвет к тому, что он уже изменил.

это код setOnItemClickListener:

productList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 

      Log.i("imIn","Item Clicked"); 
      v.animate(); 
      if(listClicked[position]==0) 
      { 
       Log.i("***After*** ","Cyan Set ON"); 
       v.setBackgroundColor(Color.parseColor("GREEN")); 
       listClicked[position]=1; 
      } 
      else if(listClicked[position]==1){ 
       Log.i("***After*** ","Cyan Set OFF"); 
       v.setBackgroundColor(Color.parseColor("WHITE")); 

       listClicked[position]=0; 

      } 

     } 
    }); 

AfterEdit :: это мой адаптер

public class ProductListBaseAdapter extends BaseAdapter { 
SharedPreferences sharedpreferences; 

private static ArrayList<Product> searchArrayList; 
private LayoutInflater mInflater; 

ArrayList<TotalSelectedProduct> selectedProducts=new ArrayList<>(); 
final int[] listClicked; 

    public ProductListBaseAdapter(Context context, ArrayList<Product> totalProducts, int[] ClickedList) { 
    searchArrayList =totalProducts; 
    mInflater = LayoutInflater.from(context); 
    listClicked=ClickedList;  
} 

public int getCount() { 
    return searchArrayList.size(); 
} 

public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.item_list, null); 

     holder = new ViewHolder(); 

     holder.txtItem = (TextView) convertView.findViewById(R.id.item_name); 
     holder.edit=(Button)convertView.findViewById(R.id.edit); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    /** I have tried inserting onClickListener in adapter also .but resulting same 
    * 
    holder.txtItem.setText(searchArrayList.get(position).getItemName());  
    final View.OnClickListener makeListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      v.animate(); 
      if(listClicked[position]==0) 
      { 
       Log.i("***After*** ","Cyan Set ON"); 
       v.setBackgroundColor(Color.parseColor("#ff2dbeff")); 
       listClicked[position]=1; 
      } 
      else if(listClicked[position]==1){ 
       Log.i("***After*** ","Cyan Set OFF"); 
       v.setBackgroundColor(Color.parseColor("#009933")); 
       listClicked[position]=0; 

      } 

     } 
    }; 
    holder.txtItem.setOnClickListener(makeListener); */ 


    return convertView; 
} 

static class ViewHolder { 
    TextView txtItem; 
    Button edit; 

} 

}

Почему это происходит?

+1

Ваш заголовок и описание вопроса имеют большую разницу. Пожалуйста, исправьте свой заголовок вопроса, чтобы он дошел до большего количества пользователей. –

+0

Вы использовали пользовательский адаптер ?, пожалуйста, укажите правильный код. –

+0

@AndroidWeblineindia также вставить код адаптера, пожалуйста, проверьте –

ответ

2

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

UPDATE с примерными

public class ProductAdapter extends ArrayAdapter<Product> { 

    public PProductAdapter(Activity activity, 
      ArrayList<Product> products) { 
     super(activity, R.layout.item_product, products); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final Product p = getItem(position); 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      viewHolder = new ViewHolder(); 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.item_product, parent, 
        false); 
      viewHolder.name = (TextView) convertView.findViewById(R.id.tvName); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       p.checked = !p.checked; 
       if (p.checked) 
        v.setBackgroundColor(Color.parseColor("#ff2dbeff")); 
       else 
        v.setBackgroundColor(Color.parseColor("#009933")); 
      } 
     }); 

     viewHolder.name.setText(p.name); 
     return convertView; 
    } 

    private class ViewHolder { 
     TextView name; 
    } 
} 

public class Product{ 
    public String name; 
    public boolean checked; 
    Product() { 
     name = "dummy name"; 
     checked = false; 
    } 
} 
+0

Привет, я добавил адаптер для этого и попробовал поместить 'onClickListener' внутри адаптера, но все равно происходит то же самое –

+0

тоже вставил код –

+0

@ShreekantN, gmetax говорит« каждый элемент »списка. – Devraj

1

делать следующим образом

1 Ручка щелчка событие в адаптере не активность

2 Посмотреть на ваш щелчок может быть родительским расположение в item_list.xml

3 Не использовать final int [] listClicked вместо этого имеет логическую переменную в классе продукта, например isC hecked.

4 Set and unset isChecked при щелчке и задании цвета фона