Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用SharedReferences在ListView中保存ToggleButton状态_Android_Listview_Sharedpreferences_Baseadapter_Togglebutton - Fatal编程技术网

Android 使用SharedReferences在ListView中保存ToggleButton状态

Android 使用SharedReferences在ListView中保存ToggleButton状态,android,listview,sharedpreferences,baseadapter,togglebutton,Android,Listview,Sharedpreferences,Baseadapter,Togglebutton,我想通过以下代码中的SharedReferences保存我的ToggleButton状态。 请引导我。 非常感谢 public class MyAdapterList extends BaseAdapter { private Context context; private List text; public MyAdapterList(Context context, List text) { this.context = context;

我想通过以下代码中的SharedReferences保存我的ToggleButton状态。 请引导我。 非常感谢

public class MyAdapterList extends BaseAdapter { private Context context; private List text; public MyAdapterList(Context context, List text) { this.context = context; this.text = text; } @Override public int getCount() { return text.size(); } @Override public Object getItem(int position) { return text.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.item_view, null, false); TextView tv = (TextView) view.findViewById(R.id.textView); tv.setText(text.get(position)); Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/b_titr.ttf"); tv.setTypeface(tf); tv.setTextColor(Color.parseColor("#003366")); tv.setTypeface(tv.getTypeface(), Typeface.BOLD); final ToggleButton toggleButton = (ToggleButton) view.findViewById(R.id.t_button); final MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(context); toggleButton.setBackgroundResource(R.drawable.favorite_not_selected); toggleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (toggleButton.isChecked()) { myDatabaseHelper.insert(text.get(position)); toggleButton.setBackgroundResource(R.drawable.favorite_selected); Toast.makeText(context, "Was added to the list of favorites", Toast.LENGTH_SHORT).show(); } else { myDatabaseHelper.deletedData(text.get(position)); Toast.makeText(context, "Removed from favorites", Toast.LENGTH_SHORT).show(); toggleButton.setBackgroundResource(R.drawable.favorite_not_selected); } } }); return view; } } 公共类MyAdapterList扩展了BaseAdapter{ 私人语境; 私有列表文本; 公共MyAdapterList(上下文、列表文本){ this.context=上下文; this.text=文本; } @凌驾 public int getCount(){ 返回text.size(); } @凌驾 公共对象getItem(int位置){ 返回text.get(位置); } @凌驾 公共长getItemId(int位置){ 返回位置; } @凌驾 公共视图getView(最终整数位置、视图转换视图、视图组父视图){ LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务); 视图=充气机。充气(R.layout.item_视图,空,假); TextView tv=(TextView)view.findViewById(R.id.TextView); tv.setText(text.get(position)); Typeface tf=Typeface.createFromAsset(context.getAssets(),“font/b_titr.ttf”); 电视设置字体(tf); tv.setTextColor(Color.parseColor(#003366”); tv.setTypeface(tv.getTypeface(),Typeface.BOLD); final ToggleButton ToggleButton=(ToggleButton)view.findViewById(R.id.t_按钮); 最终MyDatabaseHelper MyDatabaseHelper=新MyDatabaseHelper(上下文); toggleButton.setBackgroundResource(R.drawable.favorite\u未选中); toggleButton.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ if(toggleButton.isChecked()){ myDatabaseHelper.insert(text.get(position)); toggleButton.setBackgroundResource(R.drawable.favorite_选中); Toast.makeText(上下文,“已添加到收藏夹列表”,Toast.LENGTH_SHORT.show(); }否则{ myDatabaseHelper.deletedData(text.get(position)); Toast.makeText(上下文,“从收藏夹中删除”,Toast.LENGTH_SHORT.show(); toggleButton.setBackgroundResource(R.drawable.favorite\u未选中); } } }); 返回视图; } } 如果我没弄错的话 使用唯一键将选中的项存储在某个位置的数据库中(如;-name,如果它是唯一的)。。获取通过构造函数检查的列表,并签入
getview()
(如果存在),然后将其选中,否则将其取消选中。。
您也可以使用共享首选项。。这两种技术都需要独特的价值

您可以使用以下代码保存切换按钮状态

   final   SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        ToggleButton toggle = (ToggleButton) findViewById(R.id.toggle);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

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

                prefs.edit().putBoolean("value", isChecked).commit();
            }
        });
要把它们拿回来,请使用

 Boolean value = prefs.getBoolean("value", false);
static ArrayList toogleValue=new ArrayList();
ToggleButton toggle=(ToggleButton)findViewById(R.id.toggle);
if(toogleValue.contains(“id”))
{
toggle.setChecked(true)
}否则
{
toggle.setChecked(false);
}
toggle.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查)
{
toogleValue.add(“id”)
}否则
{
if(toogleValue.contains(id))
toogleValue.remove(“id”)
}             
}
});
我希望它能帮助你。

使用布尔值和onClick中的switch语句保存特定状态非常简单

private Boolean toggleBtn1;
private Boolean toggleBtn2;
private Boolean isChecked;
在getView中:

toggleBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                isChecked = ((ToggleButton)v).isChecked();

                toggleBtn.setTag(position);

                String pos = String.valueOf(position);

                switch (pos){

                    case "0" :

                        if (isChecked){

                            toggleBtn1 = true;

                        } else {

                            toggleBtn1 = false;

                        }

                    case "1" :

                        if (isChecked){

                            toggleBtn2 = true;

                        } else {

                            toggleBtn2 = false;

                        }

                }

            }
        });

将布尔值保存在getView外部

你的意思是你不想对列表中的所有项目都这样做?兄弟,请检查我的回答你需要将每个值存储在数据库中,你不能使用首选项,因为你将只保存一个值,而不是每个项目的所有值让我知道你的结果,但它将只保存一个状态,不是每件物品的所有状态都能解决你的问题
toggleBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                isChecked = ((ToggleButton)v).isChecked();

                toggleBtn.setTag(position);

                String pos = String.valueOf(position);

                switch (pos){

                    case "0" :

                        if (isChecked){

                            toggleBtn1 = true;

                        } else {

                            toggleBtn1 = false;

                        }

                    case "1" :

                        if (isChecked){

                            toggleBtn2 = true;

                        } else {

                            toggleBtn2 = false;

                        }

                }

            }
        });