2017-02-16 2 views
1

У меня есть программа для Android, но мой список не работает правильно. , если в списке есть больше элементов со списком прокрутки, когда я нажму последний флажок, прокрутив его чек другим элементом. пожалуйста, найдите мой код sample.please, помогите мне решить эту проблему.ListView с CheckBox Scrolling Issue

Это мой код GetView для адаптера класса

@SuppressLint("InflateParams") 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View vi = convertView; 
     if(convertView==null){ 
      vi = inflater.inflate(R.layout.unsettled_invoice_layout, null); 
      holder = new ViewHolder(); 
      holder.desc = (TextView) vi.findViewById(R.id.usinvoicedesc); 
      holder.chkbox = (CheckBox) vi.findViewById(R.id.selected); 
      holder.chkbox.setOnClickListener(new OnItemClickListener(position)); 
      vi.setTag(holder); 
      vi.setTag(R.id.selected, holder.chkbox); 
     } else 
      holder=(ViewHolder)vi.getTag(); 
     if(data.size()<=0){ 
      holder.desc.setText("No Data"); 
     }else{ 
      tempValues=null; 
      tempValues = (Invoice)data.get(position); 
      if(mode == 1){ 
       int myColor = Color.rgb(0, 128, 0); 
       if(tempValues.getStatus() == 2){ 
         myColor = Color.rgb(0, 128, 0);  // Green   
         holder.chkbox.setChecked(false); 
       }else if(tempValues.getStatus() == 3){ 
         myColor = Color.rgb(128, 0, 0); // Red 
         holder.chkbox.setChecked(true); 
       } 
       holder.desc.setBackgroundColor(myColor); 
      } 
      holder.desc.setText(tempValues.toString()); 
      vi.setOnClickListener(new OnItemClickListener(position)); 
     } 
     return vi; 
    } 

Это layout.xml, который я использовал для андроид

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    android:clickable="false" 
    android:descendantFocusability="blocksDescendants" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:paddingTop="0dip" 
    android:textColor="#000000" > 

    <LinearLayout 
     android:id="@+id/usinvoicelayout" 
     android:layout_width="fill_parent" 
     android:layout_height="95dp" 
     android:layout_marginBottom="3dp" 
     android:layout_marginTop="2dip" 
     android:clickable="false" 
     android:descendantFocusability="blocksDescendants" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:orientation="horizontal" 
     android:paddingTop="0dip" > 

     <TextView 
      android:id="@+id/usinvoicedesc" 
      android:layout_width="520dp" 
      android:layout_height="90dp" 
      android:layout_gravity="start" 
      android:gravity="center_vertical" 
      android:textColor="#FFFF00" 
      android:textSize="18sp" /> 

     <CheckBox 
      android:id="@+id/selected" 
      android:layout_width="50dp" 
      android:layout_height="80dp" 
      android:layout_marginStart="15dip" 
      android:button="@drawable/checkbox_background" 
      android:clickable="false" 
      android:focusable="false" 
      android:focusableInTouchMode="false" /> 
    </LinearLayout> 

</LinearLayout> 
+2

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

ответ

0

Для этого вам необходимо поддерживать HashMap. Когда вы нажмете на флажок поставить позицию в hashmap и в getview перед установкой, установите флажок check check в hashmap. если есть, то установите флажок.

0

Пожалуйста, проверьте ссылку ниже: Это конкретное решение для выпуска другого элемента галочки на свитке:

http://lalit3686.blogspot.in/2012/06/today-i-am-going-to-show-how-to-deal.html

В приведенном выше примере ссылке в вашем списке следует класс адаптера GetView() метод добавление ниже коды :

viewHolder.checkbox.setTag(position); // This line is important. 

и флажком нажмите кнопку добавить ниже код:

viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
       } 
      }); 

Пожалуйста, примите ответ, если это поможет вам решить вашу проблему.

+0

Не решить мою проблему –