简体   繁体   中英

List Preference or Shared Preference?

If I have a listview extending the list activity , and creating a check list (simple_item_checked). Is it better to use List Preference to save the checked value or Shared Preference to save the value?

I also have a small doubt on setting up shared preference for the list view activity. I am passing the list item row position and the boolean value of that row ( is checked or not) to the shared preference using getInt and getBoolean . Is it right? Or should I have to include or pass any other parameters apart from this to ensure that the proper row is checked ? Some one please help me .

I have a doubt on List Preference because as far as I've seen , list preferences are used only for the setting screens. Like our android setting screen. Can we also use the same for a simple list item checked to store the checked state of an item in the list.

    public class Secondact extends ListActivity {
    ListView list;
    SharedPreferences pref;
     int pos,itemposition,positionvalue;
     boolean boolval,checkvalue;
     SharedPreferences.Editor editor;
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          // setContentView(R.layout.secondact);
            Toast.makeText(getApplicationContext(), "ONCREATE", 50).show();

            list=getListView();

           String[] family_array=this.getResources().getStringArray(R.array.family);
           ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,family_array);
           list.setAdapter(adapter);
           list.setChoiceMode(1);
           pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
         pos=pref.getInt("itempos", pos);
             boolval=pref.getBoolean("boolvalue", true);
            list.setItemChecked(pos, boolval);
            Toast.makeText(getApplicationContext(), "DATA LOADED ITEM NO:"+pos, 50).show();

           list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub


                pos=position;
                list.setItemChecked(pos, true);
                pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                editor=pref.edit();
                editor.putInt("itempos", pos);
                editor.putBoolean("boolvalue", list.isItemChecked(pos));
                editor.commit();
            }
        });

}

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
     editor=pref.edit();
        editor.putInt("itempos", pos);
        editor.putBoolean("boolvalue", list.isItemChecked(pos));
        editor.commit();
    //  Toast.makeText(getApplicationContext(), "PAUSE", 50).show();

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
         pos=pref.getInt("itempos", pos);
         boolval=pref.getBoolean("boolvalue", true);
        list.setItemChecked(pos, boolval);
        //Toast.makeText(getApplicationContext(), "RESUME", 50).show();

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
         editor=pref.edit();
        editor.putInt("itempos", pos);
        editor.putBoolean("boolvalue", list.isItemChecked(pos));
        editor.commit();
        Toast.makeText(getApplicationContext(), "DESTROY", 50).show();
        Toast.makeText(getApplicationContext(), "DATA SAVED ITEM NO:"+pos, 50).show();

    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
     pos=pref.getInt("itempos", pos);
         boolval=pref.getBoolean("boolvalue", true);
        list.setItemChecked(pos, boolval);
        //Toast.makeText(getApplicationContext(), "RESTART", 50).show();

    }

    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        savedInstanceState.putInt("itempositionno", positionvalue);
        savedInstanceState.putBoolean("checkvalue", true);
        Toast.makeText(getApplicationContext(), "ONSAVEINSTANCE", 50).show();
        list.setItemChecked(pos, checkvalue);
        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        pos=savedInstanceState.getInt("itempositionno", pos);
         checkvalue=savedInstanceState.getBoolean("checkvalue", true);
        list.setItemChecked(pos, checkvalue);
        Toast.makeText(getApplicationContext(), "ONRESTOREINSTANCE", 50).show();
        super.onRestoreInstanceState(savedInstanceState);
    }




}

You cant use a ListPreference here. You can either save the list of preference as a file or can use the shared preference. it will be better to use sharedPreference as it is pretty fast and easy.

private ArrayList<Boolean> checkList;

                SharedPreferences pref=getSharedPreferences("shared_check_prefs",Context.MODE_PRIVATE);
                    SharedPreferences.Editor edit=pref.edit();
                    for(int i=0;i<number;i++){
                        edit.putBoolean("CECK_PREFS"+i, value);
                        edit.commit();
                    }

The code to get the preference of the checkbox at row =i will be

SharedPreferences pref=getSharedPreferences("shared_check_prefs",Context.MODE_PRIVATE); pref.getBoolean("CECK_PREFS"+i,false);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM