簡體   English   中英

Android如何在sharedpreference中保存自定義復選框狀態並在應用重啟后獲取

[英]android how to save custom checkbox state in sharedpreference and get it after app restart

我有所有安裝應用程序的listview 我正在使用自定義適配器,現在的問題是,我要保存復選框狀態,當我將復選框的狀態保存在sharedpreferences中時,然后在應用程序重新啟動時又打開我保存的listview復選框狀態自動檢查。 怎么做? 這是我的代碼

public class Listadapter extends BaseAdapter {
    private Context mContext;
    private List<ApplicationInfo> mListAppInfo;
    private PackageManager mPackManager;
    private ArrayList<Boolean> checkList = new ArrayList<Boolean>();
    CheckBox checkBox;
    boolean index[];
    boolean[] itemChecked;
    public Listadapter(Context applicationContext, List<ApplicationInfo> installedApplication, PackageManager packageManager) {
        //super(applicationContext,textViewResourceId,installedApplication);
            super();
            this.mContext = applicationContext;
            this.mListAppInfo = installedApplication;
            index = new boolean[installedApplication.size()];
            this.mPackManager = packageManager;
            for (int i = 0; i < installedApplication.size(); i++) {
            checkList.add(false);
            itemChecked = new boolean[installedApplication.size()];
            }
    }
    private class ViewHolder {
        ImageView ivAppIcon;
        TextView tvAppName;
        TextView tvPkgName;
        CheckBox checkBox;
    }
    @Override
    public int getCount() {
        return mListAppInfo.size();
        //return ((null != mListAppInfo) ? mListAppInfo.size() : 0);
    }

    @Override
    public Object getItem(int position) {
       // index = new boolean[mListAppInfo.size()];
        return mListAppInfo.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // get the selected entry

        final ViewHolder holder;

      //  LayoutInflater inflater = (LayoutInflater) mContext.getLayoutInflater();
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();
        // reference to convertView
            holder.tvAppName = (TextView) convertView
                    .findViewById(R.id.textView1);
            holder.tvPkgName = (TextView) convertView
                    .findViewById(R.id.textView);
            holder.checkBox = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);
            holder.ivAppIcon = (ImageView) convertView
                    .findViewById(R.id.imageView);

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

        }
             else {

                holder = (ViewHolder) convertView.getTag();
            }
        final ApplicationInfo entry = mListAppInfo.get(position);

        holder.ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
        holder.tvAppName.setText(entry.loadLabel(mPackManager));
        holder.tvPkgName.setText(entry.packageName);
        holder.checkBox.setChecked(false);


        holder.checkBox.setChecked(false);

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

        holder.checkBox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (holder.checkBox.isChecked())
                    itemChecked[position] = true;
                else
                    itemChecked[position] = false;
            }
        });
        return convertView;
    }
}

我會在共享的首選項鍵中使用您的復選框“ position”:

    SharedPreferences sharedPreferences = getActivity().getSharedPreferences("yourSharedPref", 0);
    SharedPreferences.Editor editor = sharedPreferences.edit();

並像這樣存儲我的復選框的狀態:

    if (holder.checkBox.isChecked())
        editor.putBoolean("CheckBoxState" + position, true);  
    else
        editor.putBoolean("CheckBoxState" + position, false); 

然后,您可以通過解析以下位置來恢復復選框狀態:

    for(int i = 0 ; i < positionMax ; i++){
        sharedPreferences.getBoolean("CheckBoxState" + i);
        //Do what you want with this value.
    } 

holder.checkBox.setChecked()應該讀取狀態,例如。 來自開發人員文檔:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
boolean defaultValue = getResources().getBoolean(R.string.default_value);
boolean isChecked = sharedPref.getBoolean(getString(R.string.saved_state), defaultValue);

在方法onClick()中,您可以編寫狀態:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean(getString(R.string.saved_state), newState);
editor.commit();

檢查文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM