2017-02-16 109 views
1

我有Android程序,但我的列表視圖無法正常工作。 如果列表視圖有更多的項目與滾動,當我要點擊最後一個複選框與滾動檢查另一個項目。請找到我的代碼sample.please幫我解決這個問題。ListView與複選框滾動問題

這我的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我用它爲Android

<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之前設置複選框時在hashmap中檢查位置。如果存在,然後選中複選框。

0

請查看以下鏈接: 這是你的另一個項目的複選框上滾動檢查的問題的具體解決方案:()在你的列表視圖適配器類getView

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

在上面的鏈接示例方法添加以下代碼:

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

尚未解決我的問題 –