2017-07-07 3 views
0

スピナーはうまく動作します。クリックすると、隣にチェックボックスがあるドロップダウンメニューが表示されます。私の問題は、それが目立つチェックボックスをクリックしたときですが、スピナーを閉じて再び開くと、ボックスはアンティッキになります。ボックスをチェックしたままにしておきたいのですがどうすればいいですか? ここに私のコードです。スピナーアダプターは元に戻す

ArrayList<StateVO> listbtop = new ArrayList<>(); 
    for (int i = 0; i < btoppings.length; i++) { 
     StateVO stateVO = new StateVO(); 
     stateVO.setTitle(btoppings[i]); 
     stateVO.setSelected(false); 
     listbtop.add(stateVO); 
    } 
MyAdapter myAdapter = new MyAdapter(Guest.this, 0, listbtop); 
     spinnerbtop.setAdapter(myAdapter); 

ここに私のアダプタクラスがあります。

public class MyAdapter extends ArrayAdapter<StateVO> { 
    private Context mContext; 
    private ArrayList<StateVO> listState; 
    private MyAdapter myAdapter; 
    private boolean isFromView = false; 

    public MyAdapter(Context context, int resource, List<StateVO> objects) { 
     super(context, resource, objects); 
     this.mContext = context; 
     this.listState = (ArrayList<StateVO>) objects; 
     this.myAdapter = this; 

    } 




    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    public View getCustomView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      LayoutInflater layoutInflator = LayoutInflater.from(mContext); 
      convertView = layoutInflator.inflate(R.layout.spinner_item, null); 
      holder = new ViewHolder(); 
      holder.mTextView = (TextView) convertView.findViewById(R.id.text); 
      holder.mCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox); 
      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.mTextView.setText(listState.get(position).getTitle()); 
     // To check weather checked event fire from getview() or user input 
     isFromView = true; 
     holder.mCheckBox.setChecked(listState.get(position).isSelected()); 
     isFromView = false; 

     if ((position == 0)) { 
      holder.mCheckBox.setVisibility(View.INVISIBLE); 
     } else { 
      holder.mCheckBox.setVisibility(View.VISIBLE); 
     } 
     holder.mCheckBox.setTag(position); 
     holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       int getPosition = (Integer) buttonView.getTag(); 


      } 
     }); 
     return convertView; 
    } 
} 

答えて

0

オブジェクト "StateVO"にチェックされた状態を維持する必要があります。このgetCustomViewの実装を試すことができますか?

public View getCustomView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    if (convertView == null) { 
    LayoutInflater layoutInflator = LayoutInflater.from(mContext); 
    convertView = layoutInflator.inflate(R.layout.spinner_item, null); 
    holder = new ViewHolder(); 
    holder.mTextView = (TextView) convertView.findViewById(R.id.text); 
    holder.mCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox); 

    holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     listState.get((Integer) holder.mCheckBox.getTag()).setSelected(isChecked); 
     } 
    }); 
    convertView.setTag(holder); 
    } else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.mCheckBox.setTag(position); 

    holder.mTextView.setText(listState.get(position).getTitle()); 
    holder.mCheckBox.setChecked(listState.get(position).isSelected()); 

    return convertView; 
}