2017-06-02 13 views
-1

私はチェックボックスとテキストビューのlistViewを持っているダイアログボックスを持っています。私はstName ArraylistをtextViewに表示しました。今私が望むのは、チェックボックスを選択した後で、ダイアログボックスを再度開いたときにチェックされたchecboxが表示されるはずです。ダイアログボックスが開いたらチェックボックスをチェックします

public class StudentNameAdapter extends ArrayAdapter{ 

    Context context; 
    BaseActivity activity; 
    ArrayList<String> updatedList,studentId,studentIdUpdated; 
    ArrayList<CheckModelClass> stName; 

    public StudentNameAdapter(Context context, BaseActivity activity, ArrayList<CheckModelClass> stName, ArrayList<String> updatedList, ArrayList<String> studentId, ArrayList<String> studentIdUpdated) { 

     super(context, R.layout.student_name_listview,stName); 
     this.context = context; 
     this.stName = stName; 
     this.activity =activity; 
     this.updatedList =updatedList; 
     this.studentId = studentId; 
     this.studentIdUpdated = studentIdUpdated; 
    } 

    private static class ViewHolder { 

     CheckBox checkbox; 
     TextView text; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder = null; 
     if (convertView == null) { 

      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.student_name_listview, parent, false); 

      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.text1); 
      viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox); 

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

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

        int getPosition = (Integer) buttonView.getTag(); 
        stName.get(getPosition).setSelected(buttonView.isChecked()); 
        if(isChecked){ 

         if(studentIdUpdated.contains(studentId.get(getPosition))){ 

         } 
         else{ 

          updatedList.add(stName.get(getPosition).getName()); 
          studentIdUpdated.add(studentId.get(getPosition)); 
         } 

        }else 

         { 

         updatedList.remove(stName.get(getPosition).getName()); 
         studentIdUpdated.remove(studentId.get(getPosition)); 
        } 



       } 

      }); 

      convertView.setTag(viewHolder); 
      convertView.setTag(R.id.text1, viewHolder.text); 
      convertView.setTag(R.id.checkbox, viewHolder.checkbox); 
     } 
     else { 

      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.checkbox.setTag(position); 

     viewHolder.text.setText(stName.get(position).getName()); 
     viewHolder.checkbox.setChecked(stName.get(position).isSelected()); 

     return convertView; 
    } 
} 

答えて

0

はこれを試してください。..

viewHolder.checkbox.setChecked(stName.get(position).isSelected()); 

    viewHolder.checkbox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      CheckBox cb = (CheckBox) view; 

      if (cb.isChecked()) { 

        if(studentIdUpdated.contains(studentId.get(getPosition))){ 

        } 
        else{ 

         updatedList.add(stName.get(getPosition).getName()); 
         studentIdUpdated.add(studentId.get(getPosition)); 
        } 

       }else 

        { 

        updatedList.remove(stName.get(getPosition).getName()); 
        studentIdUpdated.remove(studentId.get(getPosition)); 
       } 

     } 
    }); 
+0

、これは動作しません。あなたの答えは私の質問には関係ありません。私が欲しいのは、いったんチェックボックスを選択してダイアログを閉じることです。私はデイログを開いたときにチェックされるべきです。 –

+0

あなたはviewChangeListnerを使用していますが、これはビューホールダーとは完全には機能しません。ビューホールダーは一度に10行まで格納できるので、スクロールするとcheckdChangeListnerは値をfalseに変更します。 OnClickListnerを使用する理由は、onClickListnerをクリックするだけで動作するためです – kkk

関連する問題