Java 当后退按钮后,当应用程序关闭/重新启动时,保持开关按钮处于选中状态

Java 当后退按钮后,当应用程序关闭/重新启动时,保持开关按钮处于选中状态,java,android,button,android-fragments,android-listview,Java,Android,Button,Android Fragments,Android Listview,我在一个列表视图中有一段已安装的应用程序,旁边有一个切换按钮 我想做的是,当用户点击按钮并打开时,我希望它在用户返回、退出应用程序或重新启动活动时保持打开状态 我做过研究,我知道这是可以实现的,但我不知道如何实现这一点 我试着这样做,但没有成功 以下是我的适配器类: package com.ibc.android.demo.appslist.app; import android.app.Activity; import android.content.pm.PackageInfo; im

我在一个列表视图中有一段已安装的应用程序,旁边有一个切换按钮

我想做的是,当用户点击按钮并打开时,我希望它在用户返回、退出应用程序或重新启动活动时保持打开状态

我做过研究,我知道这是可以实现的,但我不知道如何实现这一点

我试着这样做,但没有成功

以下是我的适配器类:

package com.ibc.android.demo.appslist.app;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Switch;
import android.widget.TextView;

import com.spicycurryman.getdisciplined10.app.R;

import java.util.List;

public class ApkAdapter extends BaseAdapter {


    List<PackageInfo> packageList;
    Activity context;
    PackageManager packageManager;
    boolean[] itemChecked;
    SharedPreferences sharedPrefs;



    public ApkAdapter(Activity context, List<PackageInfo> packageList,
                      PackageManager packageManager) {
        super();
        this.context = context;
        this.packageList = packageList;
        this.packageManager = packageManager;
        itemChecked = new boolean[packageList.size()];


    }


    private class ViewHolder {
        TextView apkName;
        Switch ck1;
    }

    public int getCount() {
        return packageList.size();
    }

    public Object getItem(int position) {
        return packageList.get(position);
    }

    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.installed_apps, null);
            holder = new ViewHolder();

            holder.apkName = (TextView) convertView
                    .findViewById(R.id.appname);
            holder.ck1= (Switch)convertView
                    .findViewById(R.id.checkBox1);

            convertView.setTag(holder);
            //holder.ck1.setTag(packageList.get(position));

        } else {

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



        // ViewHolder holder = (ViewHolder) convertView.getTag();
        PackageInfo packageInfo = (PackageInfo) getItem(position);



        Drawable appIcon = packageManager
                .getApplicationIcon(packageInfo.applicationInfo);




        String appName = packageManager.getApplicationLabel(
                packageInfo.applicationInfo).toString();
        appIcon.setBounds(0, 0, 80, 80);
        holder.apkName.setCompoundDrawables(appIcon, null, null, null);
        holder.apkName.setCompoundDrawablePadding(15);
        holder.apkName.setText(appName);
        holder.ck1.setChecked(false);

        //What would I put here!?!?

        if (itemChecked[position])
            holder.ck1.setChecked(true);
        else
            holder.ck1.setChecked(false);

        holder.ck1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (holder.ck1.isChecked()) {
                    itemChecked[position] = true;
                    Log.i("This is", " checked: " + position);

                }

                else {
                    itemChecked[position] = false;
                    Log.i("This is", " not checked: " + position);

                }
            }
        });

        return convertView;

    }




}

android中存储某些对象状态的一种常见方法是SharedReference。基本上,您将键值对存储在应用程序的专用文件中。在活动中,您可以通过onDestroy()方法最合理地存储按钮的状态,如下所示:

SharedPreferences prefs = getSharedPreferences(
                           "file_name", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putBoolean("BUTTON_SELECTED", true);
editor.commit();
SharedPreferences prefs = getSharedPreferences(
                               "file_name", Context.MODE_PRIVATE);
boolean isButtonSelected = prefs.getBoolean("BUTTON_SELECTED", false);
您可以在活动的onCreate()方法中合理地保持相同按钮的状态,如下所示:

SharedPreferences prefs = getSharedPreferences(
                           "file_name", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putBoolean("BUTTON_SELECTED", true);
editor.commit();
SharedPreferences prefs = getSharedPreferences(
                               "file_name", Context.MODE_PRIVATE);
boolean isButtonSelected = prefs.getBoolean("BUTTON_SELECTED", false);

然后你可以设置这个按钮的最后状态

查看
SharedReferences
。您是从哪里获得存储的
名称的,为什么不像前面5行一样使用
复选框1
?(pref的名称也是如此)我在代码中这样做了,但当我向下滚动按钮时,按钮会自动被选中,您可以在适配器中这样做,因为您可以访问ApplicationContext。然而,这些都是昂贵的IO操作,因此您需要注意何时调用它们。