2013-03-09 48 views
0

我正在申請,但現在我遇到了問題。無論關閉應用程序還是按設備上的後退按鈕,我都希望檢查框保持選中狀態。 這裏是我的代碼如何將狀態保存到檢查項目?

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; 
    } 
} 
+0

使用sharedpref存儲 – DjHacktorReborn 2013-03-09 21:30:11

+0

你想它檢查無論用戶切換呢? – 2013-03-09 21:47:45

+1

你必須將它保存在某個地方,https://developer.android.com/training/basics/data-storage/index.html應該讓你開始了一些Android用於存儲信息/數據的選項 – frozenkoi 2013-03-10 00:39:47

回答

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


}