在sqlite db中保存所选复选框的位置并恢复复选框的状态

时间:2016-08-02 06:38:24

标签: android listview android-sqlite android-checkbox

我想在数据库中单击按钮时保存所选复选框的位置并关闭应用程序。使用这些位置,在我打开应用程序时恢复复选框的选定状态。任何人都可以帮助我吗?

public class MainActivity extends AppCompatActivity {

    MyCustomAdapter dataAdapter = null;
    String str, str1;
    SharedPreferences pref;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pref = getSharedPreferences("MYPref", Context.MODE_PRIVATE);
        str1 = pref.getString("key","");
        List<String> list = Arrays.asList(str1.split(","));
        System.out.println(list);

        displayListView();

        checkButtonClick();


    }

    private void displayListView()
    {

        //HERE I WANT TO RETRIEVE THE POSITIONS TO SET EARLIER SELECTED CHECKOX AGAIN SELECTED
		
        ArrayList<States> stateList = new ArrayList<States>();

        States _states = new States("AP","Andhra Pradesh",false);
        stateList.add(_states);
        _states = new States("DL","Delhi",false);
        stateList.add(_states);
        _states = new States("GA","Goa",false);
        stateList.add(_states);
        _states = new States("JK","Jammu & Kashmir",false);
        stateList.add(_states);
        _states = new States("KA","Karnataka",false);
        stateList.add(_states);
        _states = new States("KL","Kerala",false);
        stateList.add(_states);
        _states = new States("RJ","Rajasthan",false);
        stateList.add(_states);
        _states = new States("WB","West Bengal",false);
        stateList.add(_states);



        dataAdapter = new MyCustomAdapter(this,R.layout.state_info, stateList);
        ListView listView = (ListView) findViewById(R.id.listView1);

        listView.setAdapter(dataAdapter);


    }

    private void checkButtonClick()
    {

        Button myButton = (Button) findViewById(R.id.findSelected);

        myButton.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {

                StringBuffer responseText = new StringBuffer();
                responseText.append("The following were selected...\n");

               

                ArrayList<States> stateList = dataAdapter.stateList;



                for(int i=0;i<stateList.size();i++)
                {

                    States state = stateList.get(i);

                    if(state.isSelected())

                    {



                        responseText.append("\n" + state.getName());


                        // HERE I WANT TO SAVE POSITIONS



                    }
                }

                Toast.makeText(getApplicationContext(),
                        responseText, Toast.LENGTH_LONG).show();

                


            }
        });
    }


}
public class MyCustomAdapter extends ArrayAdapter<States> {

    public ArrayList<States> stateList;

    public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<States> stateList)
    {
        super(context, textViewResourceId, stateList);
        this.stateList = new ArrayList<States>();
        this.stateList.addAll(stateList);
    }

    private class ViewHolder
    {
        TextView code;
        CheckBox name;
    }

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

        ViewHolder holder = null;

        Log.v("ConvertView", String.valueOf(position));

        if (convertView == null)
        {

            LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = vi.inflate(R.layout.state_info, null);

            holder = new ViewHolder();
            holder.code = (TextView) convertView.findViewById(R.id.code);
            holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);

            convertView.setTag(holder);

            holder.name.setOnClickListener( new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    CheckBox cb = (CheckBox) v;
                    States _state = (States) cb.getTag();

                 /*   Toast.makeText(getApplicationContext(), "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(),
                            Toast.LENGTH_LONG).show();*/

                    _state.setSelected(cb.isChecked());
                }
            });



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


        States state = stateList.get(position);



        holder.code.setText(" (" + state.getCode() + ")");
        holder.name.setText(state.getName());
        holder.name.setChecked(state.isSelected());

        holder.name.setTag(state);

        return convertView;
    }

}
public class States  {

    String code = null;
    String name = null;
    boolean selected = false;

    public States(String code, String name, boolean selected) {
        this.code = code;
        this.name = name;
        this.selected = selected;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }
}

1 个答案:

答案 0 :(得分:0)

您的数据是否会变得庞大?如果是,请使用SQLlite。如果仅与您所说的相同,仅用于加载应用参数,则分享偏好更好。尝试以下功能。

public static <T> T readPreference(Class<T> clazz, String key) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Application.getInstance());
        if (clazz.equals(String.class)) {
            return (T) preferences.getString(key, "");
        } else if (clazz.equals(Integer.class)) {
            return (T) (Integer) preferences.getInt(key, 0);
        } else if (clazz.equals(Boolean.class)) {
            return (T) (Boolean) preferences.getBoolean(key, false);
        } else if (clazz.equals(Float.class)) {
            return (T) (Float) preferences.getFloat(key, -0.0f);
        }

        return null;
    }

public static void writePreference(String key, Object value) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Application.getInstance());
        SharedPreferences.Editor edit = preferences.edit();
        if (value instanceof Integer) {
            edit.putInt(key, (Integer) value);
        } else if (value instanceof Boolean) {
            edit.putBoolean(key, (Boolean) value);
        } else if (value instanceof Float) {
            edit.putFloat(key, (Float) value);
        } else if (value instanceof Long) {
            edit.putLong(key, (Long) value);
        } else if (value instanceof String) {
            edit.putString(key, (String) value);
        }

        edit.apply();
    }