Java 保存复选框的选择

Java 保存复选框的选择,java,android,Java,Android,当我打开应用程序或转到其他活动时,我试图保存复选框的选择,这是一个简单的程序,显示了可以设置为收藏夹的国家和国旗的列表,我只是看不出哪里出了问题: public class MyAdapter extends ArrayAdapter<String> { String[] names; int[] flags; Context mContext; public MyAdapter(Context context, String[] countryNames, int[] coun

当我打开应用程序或转到其他活动时,我试图保存复选框的选择,这是一个简单的程序,显示了可以设置为收藏夹的国家和国旗的列表,我只是看不出哪里出了问题:

public class MyAdapter extends ArrayAdapter<String> {

String[] names;
int[] flags;
Context mContext;

public MyAdapter(Context context, String[] countryNames, int[] countryFlags, String[] countryDetails) {
    super(context, R.layout.listview_item);
    this.names = countryNames;
    this.flags = countryFlags;
    this.mContext = context;
}

@Override
public int getCount() {
    return names.length;
}

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder = new ViewHolder();
    SharedPreferences sp = mContext.getSharedPreferences("FreshStart", 0);
    boolean shouldBeChecked = sp.getBoolean(names[position], false);

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.listview_item, parent, false);
        mViewHolder.mFlag = (ImageView) convertView.findViewById(R.id.imageView);
        mViewHolder.mName = (TextView) convertView.findViewById(R.id.textView);
        mViewHolder.mCheckBox = convertView.findViewById(R.id.check_Box);

    } else {
        mViewHolder = (ViewHolder) convertView.getTag();
    }
    mContext.getSharedPreferences("FreshStart",0);
    mViewHolder.mFlag.setImageResource(flags[position]);
    mViewHolder.mName.setText(names[position]);

    mViewHolder.mCheckBox.setTag(names[position]);
    convertView.setTag(mViewHolder);
    mViewHolder.mCheckBox.setChecked(shouldBeChecked);


    mViewHolder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {
                buttonView.setSelected(true);
                Toast.makeText(mContext, "Saved as Favorite", Toast.LENGTH_SHORT).show();
            }
            else{
                buttonView.setSelected(false);
                Toast.makeText(mContext, "No Longer set as Favorite", Toast.LENGTH_SHORT).show();
            }

        }
    });

    return convertView;
}

static class ViewHolder {
    ImageView mFlag;
    TextView mName;
    CheckBox mCheckBox;
}




}
公共类MyAdapter扩展了ArrayAdapter{
字符串[]名称;
int[]标志;
语境;
公共MyAdapter(上下文上下文,字符串[]CountryName,int[]countryFlags,字符串[]countryDetails){
super(上下文、R.layout.listview_项);
this.names=国家名称;
this.flags=countryFlags;
this.mContext=上下文;
}
@凌驾
public int getCount(){
返回name.length;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder MVIEHOLDER=新的ViewHolder();
SharedReferences sp=mContext.getSharedReferences(“FreshStart”,0);
boolean shouldBeChecked=sp.getBoolean(名称[位置],false);
if(convertView==null){
LayoutInflater mInflater=(LayoutInflater)mContext。
getSystemService(上下文布局\充气机\服务);
convertView=mInflater.充气(R.layout.listview_项,父项,false);
mViewHolder.mFlag=(ImageView)convertView.findViewById(R.id.ImageView);
mViewHolder.mName=(TextView)convertView.findViewById(R.id.TextView);
mViewHolder.mCheckBox=convertView.findViewById(R.id.check_框);
}否则{
mViewHolder=(ViewHolder)convertView.getTag();
}
mContext.getSharedReferences(“FreshStart”,0);
mViewHolder.mFlag.setImageResource(标志[position]);
mViewHolder.mName.setText(名称[位置]);
mViewHolder.mCheckBox.setTag(名称[位置]);
setTag(mViewHolder);
mViewHolder.mCheckBox.setChecked(应检查);
mViewHolder.mCheckBox.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener()){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
buttonView.setSelected(真);
Toast.makeText(mContext,“另存为收藏夹”,Toast.LENGTH_SHORT.show();
}
否则{
buttonView.setSelected(假);
Toast.makeText(mContext,“不再设置为收藏夹”,Toast.LENGTH_SHORT.show();
}
}
});
返回视图;
}
静态类视窗夹{
图像视图mFlag;
文本视图mName;
复选框mCheckBox;
}
}
这是
if(isChecked)
我现在最挣扎的部分,我知道我需要保存实例状态,我已经尝试使用
SharedReferences
来保存,但不完全确定如何使用它,并希望在这样做时得到一些帮助,以帮助理解它更多的
公共类MyAdapter Extendes ArrayAdapter{
public class MyAdapter extends ArrayAdapter<String> {

String[] names;
int[] flags;
Context mContext;

public MyAdapter(Context context, String[] countryNames, int[] countryFlags, String[] countryDetails) {
super(context, R.layout.listview_item);
this.names = countryNames;
this.flags = countryFlags;
this.mContext = context;
}

@Override
public int getCount() {
    return names.length;
}

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder = new ViewHolder();
    final SharedPreferences sp = mContext.getSharedPreferences("FreshStart", 0);
    boolean shouldBeChecked = sp.getBoolean(names[position], false);

if (convertView == null) {
    LayoutInflater mInflater = (LayoutInflater) mContext.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = mInflater.inflate(R.layout.listview_item, parent, false);
    mViewHolder.mFlag = (ImageView) convertView.findViewById(R.id.imageView);
    mViewHolder.mName = (TextView) convertView.findViewById(R.id.textView);
    mViewHolder.mCheckBox = convertView.findViewById(R.id.check_Box);

} else {
    mViewHolder = (ViewHolder) convertView.getTag();
}
mContext.getSharedPreferences("FreshStart",0);
mViewHolder.mFlag.setImageResource(flags[position]);
mViewHolder.mName.setText(names[position]);

mViewHolder.mCheckBox.setTag(names[position]);
convertView.setTag(mViewHolder);
mViewHolder.mCheckBox.setChecked(shouldBeChecked);


mViewHolder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        SharedPreferences.Editor preferencesEditor = sp.edit();
        preferencesEditor.putBoolean("FreshStart", isChecked);
        preferencesEditor.apply();

        buttonView.setSelected(isChecked);
        if (isChecked)
            Toast.makeText(mContext, "Saved as Favorite", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(mContext, "No Longer set as Favorite", Toast.LENGTH_SHORT).show();

    }
});

return convertView;
}

static class ViewHolder {
ImageView mFlag;
TextView mName;
CheckBox mCheckBox;
}




}
字符串[]名称; int[]标志; 语境; 公共MyAdapter(上下文上下文,字符串[]CountryName,int[]countryFlags,字符串[]countryDetails){ super(上下文、R.layout.listview_项); this.names=国家名称; this.flags=countryFlags; this.mContext=上下文; } @凌驾 public int getCount(){ 返回name.length; } @非空 @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ ViewHolder MVIEHOLDER=新的ViewHolder(); 最终SharedReferences sp=mContext.getSharedReferences(“FreshStart”,0); boolean shouldBeChecked=sp.getBoolean(名称[位置],false); if(convertView==null){ LayoutInflater mInflater=(LayoutInflater)mContext。 getSystemService(上下文布局\充气机\服务); convertView=mInflater.充气(R.layout.listview_项,父项,false); mViewHolder.mFlag=(ImageView)convertView.findViewById(R.id.ImageView); mViewHolder.mName=(TextView)convertView.findViewById(R.id.TextView); mViewHolder.mCheckBox=convertView.findViewById(R.id.check_框); }否则{ mViewHolder=(ViewHolder)convertView.getTag(); } mContext.getSharedReferences(“FreshStart”,0); mViewHolder.mFlag.setImageResource(标志[position]); mViewHolder.mName.setText(名称[位置]); mViewHolder.mCheckBox.setTag(名称[位置]); setTag(mViewHolder); mViewHolder.mCheckBox.setChecked(应检查); mViewHolder.mCheckBox.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener()){ 检查更改后的公共无效(复合按钮视图,布尔值已检查){ SharedReferences.Editor首选项编辑器=sp.edit(); preferenceditor.putBoolean(“FreshStart”,已选中); preferenceditor.apply(); 按钮视图设置已选中(已选中); 如果(已检查) Toast.makeText(mContext,“另存为收藏夹”,Toast.LENGTH_SHORT.show(); 其他的 Toast.makeText(mContext,“不再设置为收藏夹”,Toast.LENGTH_SHORT.show(); } }); 返回视图; } 静态类视窗夹{ 图像视图mFlag; 文本视图mName; 复选框mCheckBox; } }
公共类MyAdapter扩展了ArrayAdapter{
字符串[]名称;
int[]标志;
语境;
公共MyAdapter(上下文上下文,字符串[]CountryName,int[]countryFlags,字符串[]countryDetails){
super(上下文、R.layout.listview_项);
this.names=国家名称;
this.flags=countryFlags;
this.mContext=上下文;
}
@凌驾
public int getCount(){
返回name.length;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder MVIEHOLDER=新的ViewHolder();
最终SharedReferences sp=mContext.getSharedReferences(“FreshStart”,0);
boolean shouldBeChecked=sp.getBoolean(名称[位置],false);
if(convertView==null){
LayoutInflater mInflater=(LayoutInflater)mContext。
getSystemService(上下文布局\充气机\服务);
convertView=mInflater.充气(R.layout.listview_项,父项,false);
mViewHolder.mFlag=(ImageView)convertView.findViewById(R.id.ImageView);
mViewHolder.m
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); //mContext is your context
                    final SharedPreferences.Editor editor = prefs.edit();
                    buttonView.setSelected(true);
                    if (isChecked){
                        Toast.makeText(mContext, "Saved as Favorite", Toast.LENGTH_SHORT).show();
                        editor.putBoolean("some_name",true); //
                        editor.apply();
                    }
                    else{
                        Toast.makeText(mContext, "No Longer set as Favorite", Toast.LENGTH_SHORT).show();
                        editor. editor.putBoolean("some_name",false);
                        editor.apply();
                    }

                }
mViewHolder.mCheckBox.setChecked(getSharedBoolean(context,"my_switch_key",false));
mViewHolder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
         // buttonView.setSelected(true); // No need to setSelected as callback fired after button check status already change.
         storeSharedItem(context,"storeSharedItem",isChecked);
        }
    }
});

/*
 * RCHIVED_SHARED_PREF "String" the Desired preferences file. If a preferences file by this name
 * does not exist, it will be created when you retrieve an editor 
 */
private final static ARCHIVED_SHARED_PREF = "shared_pref"; // use any String to define SharedPreference storage.

public static boolean getSharedBoolean(Context ctx, String key,boolean def) {
    return ctx.getSharedPreferences(ARCHIVED_SHARED_PREF, 0).getBoolean(key, def);
}

public static void storeSharedItem(Context ctx, String key, boolean value) {
    SharedPreferences sharedPref = ctx.getSharedPreferences(ARCHIVED_SHARED_PREF, 0);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putBoolean(key, value);
    editor.apply();
}