mercredi 4 mars 2015

Android Access Checkbox in AdapterView

I have this second right alligned nav drawer which is filled by an adapter with checkboxes. When I change those checkboxes, the name of the the CB gets stored (or removed) in an StringSet and commited to my apps sharedPrefs. - this is working.


now i want to retrieve those Strings when the app starts and automatically check those boxes. so the user doesn't has to!


but I have absolutly no clue how to access the CheckBox...


What it looks like


This ist my adapter so far:



package de.timhartmann.ledcontroller;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
* Created by Tim on 02.03.2015.
*/
public class NavDrawerZonesAdapter extends BaseAdapter {
private final ArrayList mData;
public Set<String> selectedStrings = new HashSet<String>();

public NavDrawerZonesAdapter(Map<String, String> map) {
mData = new ArrayList();
mData.addAll(map.entrySet());
}

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

@Override
public Map.Entry<String, String> getItem(int position) {
return (Map.Entry) mData.get(position);
}

@Override
public long getItemId(int position) {
// TODO implement you own logic with ID
return 0;
}

public void refreshList(Map<String, String> map){

mData.clear();
mData.addAll(map.entrySet());
notifyDataSetChanged();

}

private class ViewHolder {
TextView zone;
TextView IP;
CheckBox ZoneCheckBox;
}

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

final Context context = parent.getContext();

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();

ViewHolder viewHolder = null;

if (convertView == null){

LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.nav_drawer_zones_adapter, null);

viewHolder = new ViewHolder();
convertView.setTag(viewHolder);

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

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

if (isChecked) {
selectedStrings.add(buttonView.getText().toString());
editor.putStringSet("zones", selectedStrings).commit();
Toast.makeText(context, "Checkbox: " + buttonView.getText().toString(), Toast.LENGTH_LONG).show();
}else{
selectedStrings.remove(buttonView.getText().toString());
editor.putStringSet("zones", selectedStrings).commit();
}

}

});

}

else {

viewHolder = (ViewHolder) convertView.getTag();

}

Map.Entry zones = (Map.Entry) mData.get(position);
viewHolder.ZoneCheckBox.setText((CharSequence) zones.getKey());

return convertView;
}

}


And the Adapters Layout:



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://ift.tt/nIICcg"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:focusable="false"
android:textSize="20dp"
android:layout_marginTop="5dp"
android:focusableInTouchMode="false" />

</RelativeLayout>

Aucun commentaire:

Enregistrer un commentaire