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();
}