2012-02-28 3 views
1

В моем случае у меня есть два текстовых вида и один флажок в списке. Я использую класс ArrayAdapter для установки данных в текстовых просмотров.Android listview с флагом

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

public class Contacts_NumberActivity extends Activity { 
    /** Called when the activity is first created. */ 
    String nameList[] = { "U", "A", "B", "C", "D", "E", "F", "G", "H", 
      "I", "J", "L", "M", "N", "O", "P", "Q" }, numberList[] = { "1", 
      "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", 
      "5", "6", "7" }; 
    ListView contactList; 
    boolean[] checked; 
    ContactHolder holder = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     contactList = (ListView) findViewById(R.id.contact_list); 

     contactList.setAdapter(new ContactAdapter(this, R.layout.list_item, 
       nameList, numberList)); 

    } 

    public class ContactAdapter extends ArrayAdapter<String> { 

     Context context; 
     int layoutResourceId; 
     String data[] = null; 
     String data1[] = null; 

     public ContactAdapter(Context context, int layoutResourceId, 
       String[] data, String[] data1) { 
      super(context, layoutResourceId, data); 
      this.layoutResourceId = layoutResourceId; 
      this.context = context; 
      this.data = data; 
      this.data1 = data1; 
     } 

     @Override 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      View row = convertView; 

      if (row == null) { 
       LayoutInflater inflater = ((Activity) context) 
         .getLayoutInflater(); 
       row = inflater.inflate(layoutResourceId, parent, false); 

       holder = new ContactHolder(); 
       holder.name = (TextView) row.findViewById(R.id.name); 
       holder.number = (TextView) row.findViewById(R.id.number); 
       holder.chkbox = (CheckBox) row.findViewById(R.id.checkBox1); 

       holder.chkbox 
         .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

          @Override 
          public void onCheckedChanged(
            CompoundButton buttonView, boolean isChecked) { 

           holder.chkbox.setChecked(isChecked); 
           System.out.println("Checked possition= " 
             + isChecked); 
          } 

         }); 

       row.setTag(holder); 
      } else { 
       holder = (ContactHolder) row.getTag(); 
      } 

      holder.name.setText(data[position]); 
      holder.number.setText(data1[position]); 

      return row; 
     } 

     public class ContactHolder { 
      TextView name, number; 
      CheckBox chkbox; 
     } 
    } 
} 
+0

Я думаю, проблема с печатью listview.please проверьте ваш список, у него могут быть повторы данных, поэтому вы чувствуете, что автоматически выбираете флажок .check и дайте мне знать, что – OnkarDhane

+0

это происходит, когда я щелкнул любую отметку и прокрутил список, отмеченные флажки также отмечены. – user03

+0

проверьте ниже ссылки, которые могут вам помочь http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php http://developmentality.wordpress.com/2010/11/05/of-rubber -stamps-and-checkbox-why-your-listview-is-broken/ –

ответ

0

ваш код не имеет никаких проблем, но проблема в том, что функциях GetView ArrayAdapter, который звонит в манере, которая переинициализировать и повторно несфокусированную строку списка для этого вы используете конвертировать чек вида, который вызывает пейджинг, как если в экране вы проверяете первый флажок, то все экраны в пейджинговой получить первый флажок установлен,

, чтобы решить из этого следует использовать макет вместо просмотра списка с помощью адаптера здесь является подсказка может помочь вам

LinearLayout parent = new LinearLayout(this); 
parent.setOrientation(VERTICAL); 
parent.setLayoutParams(new LayoutParams(list_width,list_height); 

for(number of rows in your list) 
{ 
LinearLayout row= new LinearLayout(this); 
row.setOrientation(Horizontal); 
row.setLayoutParams(new LayoutParams(row_width,row_height); 

TextView text= new TextView (this); 
text.setText("your text"); 
text.setLayoutParams(new LayoutParams(text_width,text_height); 
row.addView(text); 
. 
.//other view you want to add as check box etc 
. 
. 
parent.AddView(row); 
} 

this.addView(parent); 

hope this will help you 

примечание: но в случае, если у вас есть большое количество строк, это может вызвать проблемы с памятью.