2016-06-11 5 views
1

ListViewは、TextView,ImageView,Checkboxを含むカスタムを持っています。 ListViewでは、条件に基づいてブロックする必要があるため、何もチェック/チェックを外す必要はありません。私がやっているリストビューの行/アイテムの位置を維持する方法は?

タスク:

  1. Checkboxがチェックされている場合、それはImageViewで画像を表示する必要があります。

  2. 条件に基づいてCheckBoxをチェック/有効にしたくありません。

以下はカスタムアダプター用のコードです。

public class CustomAdapter extends BaseAdapter { 

     private Context context; 
     private ArrayList<POJO> mainDataList; 
     private LayoutInflater inflater = null; 

     public CustomAdapter(Context context, ArrayList<POJO> mainDataList) { 
      this.context = context; 
      this.mainDataList = mainDataList; 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return mainDataList.size(); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public POJO getItem(int position) { 
      // TODO Auto-generated method stub 
      return mainDataList.get(position); 
     } 

     public class Holder 
     { 
      private TextView name; 
      private ImageView imageView; 
      private CheckBox check; 
     } 

     @Override 
     public View getView(final int position, View view, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      final Holder holder; 
      if (view == null) { 
       holder = new Holder(); 
       view = inflater.inflate(R.layout.my_layout_file, null); 
       holder.name = (TextView) view.findViewById(R.id.textView_Name); 
       holder.imageView = (ImageView) view.findViewById(R.id.img); 
       holder.check = (CheckBox) view.findViewById(R.id.checkBox); 

       view.setTag(holder); 
      } else { 
       holder = (Holder) view.getTag(); 
      } 

      holder.check.setTag(position); 

      if (mainDataList.get(position).isEditable()) { 
        holder.check.setEnabled(false); 
        holder.check.setClickable(false); 
       } else { 
        holder.check.setEnabled(true); 
        holder.check.setClickable(true); 
       } 
      } 

      holder.name.setText(mainDataList.get(position).getName()); 
      holder.check.setChecked(mainDataList.get(position).isSelected()); 

      if (mainDataList.get(position).isSelected()) 
         holder.imageView.setImageResource(R.drawable.ic_launcher); 
      else 
       holder.imageView.setImageResource(null); 

      return view; 
     } 
    } 

私の問題は次のとおりである:スクロールで

  1. ImageViewがランダムに関わらず、TRUE状態の画像を示します。

  2. スクロールでは、項目1がチェックされないため、4-5個のリストアイテム/行アイテムがすべてチェック不可になります(私のデバイスはスクロールせずに4-5セル/行/アイテムを画面に表示します)。単純に、getView()メカニズムごとに取得します。

私は、これはリスト項目の位置やスクロールのリストビューのリサイクルを維持する問題であることを知っています。これを行う方法?モデルは、そのプロパティがtrueに選ばれている場合、それは画像の表示にいくつかの画像リソースを設定することを意味します

if (mainDataList.get(position).isSelected()) 
      holder.imageView.setImageResource(R.drawable.ic_launcher); 

+0

私の提案は、あなたがの面で何かをするということです。建設的なコメントを共有してください – VVB

+1

あなたは条件付きで 'setImageResource'を呼び出しています:' else'節でそれを "クリア"する必要があります。また、その所有者を取り除きます:コードだけを壊し、そのメリットはゼロにほぼ等しい – pskink

+0

@ pskink私の編集を参照してください – VVB

答えて

0

は、次のような条件を持っています。あなたがスクロールして​​の収入がfalseになるたびに、何もしないという事実の下に問題があります。ビューを再利用しているため、ある時点で​​がtrueになっている古いビューがいくつか表示されています。現在はfalseであるかもしれませんが、あなたはそのための条件を指定していません。すでにSparseBooleanArrayを試してみました@sushildlh

if (mainDataList.get(position).isSelected()) 
{ 
    holder.imageView.setImageResource(R.drawable.ic_launcher); 
} 
else 
{ 
    holder.imageView.setImageResource(null); 
} 
+0

私の編集を見てください – VVB

関連する問題