如何将状态保存到已检查的项目?

时间:2013-03-09 21:29:14

标签: java android checkbox

我正在申请,但现在我遇到了问题。无论是否关闭应用程序或按下设备上的后退按钮,我都希望选中复选框。     这是我的代码

package com.example.vreaucarnet;


import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class ActeA extends MainActivity2A {

    private ListView mainListView;
    private mItems[] itemss;
    private ArrayAdapter<mItems> listAdapter;
    ArrayList<String> checked = new ArrayList<String>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acte2a);

        // Find the ListView resource.
        mainListView = (ListView) findViewById(R.id.mainListView);

        // When item is tapped, toggle checked properties of CheckBox and
        // Planet.
        mainListView
                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View item,
                            int position, long id) {
                        mItems planet = listAdapter.getItem(position);
                        planet.toggleChecked();
                        SelectViewHolder viewHolder = (SelectViewHolder) item
                                .getTag();
                        viewHolder.getCheckBox().setChecked(planet.isChecked());

                    }
                });

        // Create and populate planets.
        itemss = (mItems[]) getLastNonConfigurationInstance();

        ArrayList<mItems> planetList = new ArrayList<mItems>();

        planetList.add(new mItems("DJ-Android"));
        planetList.add(new mItems("Android"));
        planetList.add(new mItems("iPhone"));
        planetList.add(new mItems("BlackBerry"));
        planetList.add(new mItems("Java"));
        planetList.add(new mItems("PHP"));
        planetList.add(new mItems(".Net"));

        // Set our custom array adapter as the ListView's adapter.
        listAdapter = new SelectArralAdapter(this, planetList);
        mainListView.setAdapter(listAdapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        menu.add(0, 1, Menu.NONE, "Products");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case 1:

            for (int i = 0; i < checked.size(); i++) {
                Log.d("pos : ", "" + checked.get(i));
            }
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    /** Holds planet data. */
    private static class mItems {
        private String name = "";
        private boolean checked = false;

        public mItems() {
        }

        public mItems(String name) {
            this.name = name;
        }

        public mItems(String name, boolean checked) {
            this.name = name;
            this.checked = checked;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public boolean isChecked() {
            return checked;
        }

        public void setChecked(boolean checked) {
            this.checked = checked;
        }

        public String toString() {
            return name;
        }

        public void toggleChecked() {
            checked = !checked;
        }
    }

    /** Holds child views for one row. */
    private static class SelectViewHolder {
        private CheckBox checkBox;
        private TextView textView;

        public SelectViewHolder() {
        }

        public SelectViewHolder(TextView textView, CheckBox checkBox) {
            this.checkBox = checkBox;
            this.textView = textView;
        }

        public CheckBox getCheckBox() {
            return checkBox;
        }

        public void setCheckBox(CheckBox checkBox) {
            this.checkBox = checkBox;
        }

        public TextView getTextView() {
            return textView;
        }

        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }

    /** Custom adapter for displaying an array of Planet objects. */
    private static class SelectArralAdapter extends ArrayAdapter<mItems> {
        private LayoutInflater inflater;

        public SelectArralAdapter(Context context, List<mItems> planetList) {
            super(context, R.layout.simplerow, R.id.rowTextView, planetList);
            // Cache the LayoutInflate to avoid asking for a new one each time.
            inflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // Planet to display
            mItems planet = (mItems) this.getItem(position);

            // The child views in each row.
            CheckBox checkBox;
            TextView textView;

            // Create a new row view
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.simplerow, null);

                // Find the child views.
                textView = (TextView) convertView
                        .findViewById(R.id.rowTextView);
                checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);
                // Optimization: Tag the row with it's child views, so we don't
                // have to
                // call findViewById() later when we reuse the row.
                convertView.setTag(new SelectViewHolder(textView, checkBox));
                // If CheckBox is toggled, update the planet it is tagged with.
                checkBox.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        mItems planet = (mItems) cb.getTag();
                        planet.setChecked(cb.isChecked());
                    }
                });
            }
            // Reuse existing row view
            else {
                // Because we use a ViewHolder, we avoid having to call
                // findViewById().
                SelectViewHolder viewHolder = (SelectViewHolder) convertView
                        .getTag();
                checkBox = viewHolder.getCheckBox();
                textView = viewHolder.getTextView();
            }

            // Tag the CheckBox with the Planet it is displaying, so that we can
            // access the planet in onClick() when the CheckBox is toggled.
            checkBox.setTag(planet);
            // Display planet data
            checkBox.setChecked(planet.isChecked());
            textView.setText(planet.getName());
            return convertView;
        }
    }

    public Object onRetainNonConfigurationInstance() {
        return itemss;
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我真的希望这段代码可以帮助像我这样的人,因为它很容易理解

package com.example.vreaucarnet;

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;

import android.widget.TextView;


public class ActeA extends MainActivity2A  {

String PREFS_NAME = "CheckBox1Tag";

CheckBox m_checkBox2, m_checkBox1, m_checkBox3, m_checkBox4, m_checkBox5, m_checkBox6, m_checkBox7, m_checkBox8, m_checkBox9, m_checkBox10;
TextView textView1;

    String KEY1 = "CheckBox1_key";
    String KEY2 = "CheckBox2_key";
    String KEY3 = "CheckBox3_key";
    String KEY4 = "CheckBox4_key";
    String KEY5 = "CheckBox5_key";
    String KEY6 = "CheckBox6_key";
    String KEY7 = "CheckBox7_key";
    String KEY8 = "CheckBox8_key";
    String KEY9 = "CheckBox9_key";
    String KEY10 = "CheckBox10_key";






@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.acte2a);

    CheckBox checkBox2, checkBox1, checkBox3, checkBox4, checkBox5, checkBox6, checkBox7, checkBox8, checkBox9, checkBox10;
    TextView textView1;


    m_checkBox2=(CheckBox) findViewById(R.id.checkBox2);
   // checkBox2.setChecked(getFromSP("checkBox2"));
    m_checkBox1=(CheckBox) findViewById(R.id.checkBox1);
    //checkBox1.setChecked(getFromSP("checkBox1"));
    m_checkBox3=(CheckBox) findViewById(R.id.checkBox3);
   // checkBox3.setChecked(getFromSP("checkBox3"));
    m_checkBox4=(CheckBox) findViewById(R.id.checkBox4);
   // checkBox4.setChecked(getFromSP("checkBox4"));
    m_checkBox5=(CheckBox) findViewById(R.id.checkBox5);
   // checkBox5.setChecked(getFromSP("checkBox5"));    
    m_checkBox6=(CheckBox) findViewById(R.id.checkBox6);
   // checkBox6.setChecked(getFromSP("checkBox6"));
    m_checkBox7=(CheckBox) findViewById(R.id.checkBox7);
   // checkBox7.setChecked(getFromSP("checkBox7"));
    m_checkBox8=(CheckBox) findViewById(R.id.checkBox8);
   // checkBox8.setChecked(getFromSP("checkBox8"));
    m_checkBox9=(CheckBox) findViewById(R.id.checkBox9);
   // checkBox9.setChecked(getFromSP("checkBox9"));
    m_checkBox10=(CheckBox) findViewById(R.id.checkBox10);
   // checkBox10.setChecked(getFromSP("checkBox10"));
    textView1=(TextView) findViewById(R.id.textView1);

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

    boolean


    isChecked = settings.getBoolean(KEY1, false);
    m_checkBox1.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY2, false);
    m_checkBox2.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY3, false);
    m_checkBox3.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY4, false);
    m_checkBox4.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY5, false);
    m_checkBox5.setChecked(isChecked);

    isChecked=settings.getBoolean(KEY6, false);
    m_checkBox6.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY7, false);
    m_checkBox7.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY8, false);
    m_checkBox8.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY9, false);
    m_checkBox9.setChecked(isChecked);

    isChecked = settings.getBoolean(KEY10, false);
    m_checkBox10.setChecked(isChecked);
}


@Override
protected void onStop() {
    super.onStop();

    // We need an Editor object to make preference changes.
    // All objects are from android.context.Context
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();

    editor.putBoolean(KEY1, m_checkBox1.isChecked());
    editor.putBoolean(KEY2, m_checkBox2.isChecked());
    editor.putBoolean(KEY3, m_checkBox3.isChecked());
    editor.putBoolean(KEY4, m_checkBox4.isChecked());
    editor.putBoolean(KEY5, m_checkBox5.isChecked());
    editor.putBoolean(KEY6, m_checkBox6.isChecked());
    editor.putBoolean(KEY7, m_checkBox7.isChecked());
    editor.putBoolean(KEY8, m_checkBox8.isChecked());
    editor.putBoolean(KEY9, m_checkBox9.isChecked());
    editor.putBoolean(KEY10, m_checkBox10.isChecked());

    // Commit the edits!
    editor.commit();
}


}