2012-05-25 2 views
2

В моих Приложениях я выбираю пункты для заказа. Моя проблема здесь. Если я проверил флажок для заказа, еще один флажок также был проверен. Значения Если я выбираю один элемент, проверяются два элемента.Неверный выбор флажка в Android?

И, начиная с 5 предметов, он проверен правильно и отображается на странице «Заказ». С 6-го пункта. Если я выберу. На странице «Заказ» отображаются некоторые другие элементы.

Вот мой код из списка:

public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     final ViewHolder viewHolder; 
     if (view == null) {   
       view = inflater.inflate(R.layout.appetiserlistview, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.image=(ImageView)view.findViewById(R.id.appetiserimage); 
      viewHolder.text = (TextView) view.findViewById(R.id.appetisertext); 
      viewHolder.desc=(TextView)view.findViewById(R.id.appetiserdesc); 
      viewHolder.price=(TextView)view.findViewById(R.id.appetiserprice); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.bcheck); 


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






     viewHolder.image.setImageBitmap(bmps[position]); 

     viewHolder.price.setText(prices[position]); 
     viewHolder.desc.setText(descs[position]); 
     viewHolder.checkbox.setTag(itemnames[position]); 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.text.setText(itemnames[position]); 
     viewHolder.checkbox.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (((CheckBox) v).isChecked()) 
       { 
        arr.add(itemnames[position]); 
        itemprice.add(prices[position]); 
         image.add(bmps[position]); 


       } 
+1

здесь хороший пример http://www.vogella.com/articles/AndroidListView/article.html#listadvanced_interactive – Akram

+0

HTTP: // StackOverflow.com/questions/7738527/get-an-issue-while-check-the-dynamic-generated-checkbox-through-list/7738854 # 7738854 –

ответ

0

AS за поведение ListView, он не сохраняет состояние своего элемента, как они Inflayet на время прокрутки, так что вы должны использовать массив логических значений сохраняются статус флажков,

public class FriendListAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private boolean isCheck[] = new boolean[Data.fbFriendList.size()]; 
// Data.fbFriendList is arraylist contains data 
    public FriendListAdapter() { 

     mInflater = LayoutInflater.from(mContext); 
     Arrays.fill(isCheck, Boolean.FALSE); 
    } 

    @Override 
    public int getCount() { 
     return Data.fbFriendList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     View hView = convertView; 
     if (convertView == null) { 
      hView = mInflater.inflate(R.layout.friend_item, null); 
      ViewHolder holder = new ViewHolder(); 
      holder.profile_pic = (ImageView) hView 
        .findViewById(R.id.profile_pic); 
      holder.name = (TextView) hView.findViewById(R.id.name); 
      holder.checkBox = (CheckBox) hView.findViewById(R.id.checkBox); 
      hView.setTag(holder); 
     } 

     final ViewHolder holder = (ViewHolder) hView.getTag(); 

     if (isCheck[position]) { 
      holder.checkBox.setChecked(true); 
     } else { 
      holder.checkBox.setChecked(false); 
     } 

     try { 
      holder.profile_pic.setImageBitmap(Utility.model.getImage(
        Data.fbFriendList.get(position).getFbFriendFBid(), 
        Data.fbFriendList.get(position) 
          .getFbFriendThumbImgUrl())); 
      holder.name.setText(Data.fbFriendList.get(position) 
        .getFbFriendName()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      holder.name.setText(""); 
     } 

     holder.checkBox.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (holder.checkBox.isChecked()) 
        isCheck[position] = true; 
       else 
        isCheck[position] = false; 
      } 
     }); 

     return hView; 
    } 

} 

class ViewHolder { 
    ImageView profile_pic; 
    TextView name; 
    CheckBox checkBox; 
} 

Здесь isCheck [] является булевой массив используется в классе адаптера сохраняться статус флажков и Data.fbFriendList является ArrayList.

+0

где находится слушатель – Trikaldarshi

+0

@Anand Tiwari Спасибо за ваш ответ. Я попробую. – Stuthi

+0

@ Anand Tiwari Можете ли вы рассказать мне, как сохранить статус флажка в CustomAdapter? – Stuthi

0

Ее основное свойство ListView не только checkboxes, но и Edittext и other input controls будет иметь такое же значение, что и у , что на самом деле произошло в list view

элементов, которые показываются только создается.

Когда вы установили scroll, новые элементы создаются так, как и в предыдущем состоянии отображения, флажок установлен для текущего отображения. Решение 1: Создать list, в котором store the states of all checkboxes(or list items) и на вызывание bindview() method проверки состояния флажка и в соответствии с проверкой списка и снимите их также создать checkbox listener так что oncheckchange событие изменения состояния флажка (или ListItem) в список поэтому этот путь вы можете получить решение

решение 2:

если вам нужен только один флажок, то вы можете использовать ListView свойство, которое делает возможным выбор нескольких пункт

Edit 1:

набор это свойство

android:choiceMode="multipleChoice" 

для вас его 2

Follow the Link , а также See this Property

+0

Если я дам андроид: choiceMode = "2", он получает ошибку. – Stuthi

+0

см. обновления 2 это значение константы множественного выбора – Trikaldarshi

+0

Посмотрите это - http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode – Trikaldarshi

0

вы должны сохранить состояния всех ваших флажков и восстановить их соответственно. Вот пример, который я уже опубликовал. Если у вас возникнут какие-либо проблемы, дайте мне знать. Я постараюсь вам помочь.

Проверить ссылку

How to implement a button that gets all checkbox's state and adds the value of checked item into arraylist?

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