2016-07-14 10 views
0

Ich habe eine Listenansicht mit Kontrollkästchen. Ich ordne meine Listenansicht in einer EventHandler-Klasse an. Ich möchte alle Kontrollkästchen deaktivieren, wenn die Zurück-Taste gedrückt wird. Ich rufe die onBackPressed-Methode in einer anderen Aktivität auf. Also sollte ich eine andere Funktion schreiben, die eine Ansicht zurückgibt. Bitte helfen Sie. Ich habe viel gesucht, konnte aber keine genaue Lösung finden.Deaktivieren Sie alle markierten Kontrollkästchen, wenn onBackPressed in Android

Innerhalb der Klasse: Ich bekomme eine Arraylist der Viewholders, um die Checkboxen zu deaktivieren.

private ArrayList<ViewHolder> mViewHolders = new ArrayList<>(); 

ViewHolder:

private static class ViewHolder { 
    TextView topView; 
    TextView bottomView; 
    TextView dateView; 
    ImageView icon; 
    CheckBox checkBox; 
} 

getView:

public View getView(int position, View convertView, ViewGroup parent) { 
    final ViewHolder mViewHolder; 
    int num_items = 0; 
    String temp = mFileMang.getCurrentDir(); 
    File file = new File(temp + "/" + mDataSource.get(position)); 
    String[] list = file.list(); 

    if(list != null) 
     num_items = list.length; 

    if(convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext. 
      getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.tablerow, parent, false); 

     mViewHolder = new ViewHolder(); 
     mViewHolder.topView =(TextView)convertView.findViewById(R.id.top_view); 
     mViewHolder.bottomView = (TextView)convertView.findViewById(R.id.bottom_view); 
     mViewHolder.dateView =(TextView) convertView.findViewById(R.id.date_view); 
     mViewHolder.icon = (ImageView)convertView.findViewById(R.id.row_image); 
     mViewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.row_checkBox); 
     convertView.setTag(mViewHolder); 

     } else { 
      mViewHolder = (ViewHolder)convertView.getTag(); 

     } // I also make some text setting inside this. 
+1

Erstellen Sie einen Rückruf in Aktivität, in onBackPressed(), f Ire Callback-Methode, in Ihrem Adapter, implementieren Sie den Callback und in der Callback-Methode Körper, deaktivieren Sie die Kontrollkästchen. – EagleEye

+0

Aber auch Fälle berücksichtigen, wenn Sie ein Kontrollkästchen deaktivieren möchten, oder nur sichtbar, oder nur alle. –

+0

Ich möchte sie alle löschen – gunescelil

Antwort

2

Per mein Kommentar onBackPressed überprüfen die Workflow sollte wie folgt sein:
Ihre Aktivität:

public class MainActivity extends AppCompatActivity { 

private ListView mListView; 
private CustomAdapter mCustomAdapter; 
private List<YourCustomClass> mYourCustomItems; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    // don't forget to init everything you need 
    mYourCustomItems = new ArrayList<>(); 
    mListView = (ListView) findViewById(R.id.list_view); 
    mCustomAdapter = new CustomAdapter(mYourCustomItems); 
    mListView.setAdapter(mCustomAdapter); 
} 


@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode){ 
     case KeyEvent.KEYCODE_BACK: 
      //all your needed stuff 
      for (YourCustomClass item : mYourCustomItems){ 
       item.setChecked(false); 
      } 
      mCustomAdapter.notifyDataSetChanged(); 
      return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private class CustomAdapter extends BaseAdapter{ 

    private List<YourCustomClass> mYourCustomClasses; 

    public CustomAdapter(List<YourCustomClass> yourCustomClasses) { 
     mYourCustomClasses = yourCustomClasses; 
    } 

    @Override 
    public int getCount() { 
     return mYourCustomClasses.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mYourCustomClasses.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //all view holder related stuff and other initialization 
     CheckBox checkBox = itemView.findViewById(R.id.checkbox); 
     checkBox.setChecked(mYourCustomClasses.get(position).isChecked()); 
     return convertView; 
    } 
} 
+0

Vielen Dank Yurii mehr als ich brauche. – gunescelil

1

Ich schlage vor, Sie Checkbox Werte in pref zu speichern und den Wert der Checkbox ändern onbackpress

zu Shop Boolean Array in Pref

public boolean storebaray(Boolean[] array, String arrayNam, Context mContext) { 

    SharedPreferences prefs = mContext.getSharedPreferences("prefname", 0); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putInt(arrayNam +"size", array.length); 

    for(int i=0;i<array.length;i++) 
     editor.putBoolean(arrayNam + "_" + i, array[i]); 

    return editor.commit(); 
} 

die Sie kann das Array laden

public Boolean[] loadAry(String arrayNam, Context mContext) { 

    SharedPreferences prefs = mContext.getSharedPreferences("prefname", 0); 
    int size = prefs.getInt(arrayNam + "size", 0); 
    Boolean array[] = new Boolean[size]; 
    for(int i=0;i<size;i++) 
     array[i] = prefs.getBoolean(arrayNam + "_" + i, false); 

    return array; 
} 

dann die Werte

Verwandte Themen