2016-08-02 47 views
0

我想要保存按鈕在數據庫中點擊選中複選框的位置並關閉應用程序。使用這些位置,當我打開應用程序時,恢復複選框的選定狀態。任何人都可以幫助我嗎?在sqlite數據庫中保存所選複選框的位置並恢復複選框的狀態

public class MainActivity extends AppCompatActivity { 
 

 
    MyCustomAdapter dataAdapter = null; 
 
    String str, str1; 
 
    SharedPreferences pref; 
 

 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     pref = getSharedPreferences("MYPref", Context.MODE_PRIVATE); 
 
     str1 = pref.getString("key",""); 
 
     List<String> list = Arrays.asList(str1.split(",")); 
 
     System.out.println(list); 
 

 
     displayListView(); 
 

 
     checkButtonClick(); 
 

 

 
    } 
 

 
    private void displayListView() 
 
    { 
 

 
     //HERE I WANT TO RETRIEVE THE POSITIONS TO SET EARLIER SELECTED CHECKOX AGAIN SELECTED 
 
\t \t 
 
     ArrayList<States> stateList = new ArrayList<States>(); 
 

 
     States _states = new States("AP","Andhra Pradesh",false); 
 
     stateList.add(_states); 
 
     _states = new States("DL","Delhi",false); 
 
     stateList.add(_states); 
 
     _states = new States("GA","Goa",false); 
 
     stateList.add(_states); 
 
     _states = new States("JK","Jammu & Kashmir",false); 
 
     stateList.add(_states); 
 
     _states = new States("KA","Karnataka",false); 
 
     stateList.add(_states); 
 
     _states = new States("KL","Kerala",false); 
 
     stateList.add(_states); 
 
     _states = new States("RJ","Rajasthan",false); 
 
     stateList.add(_states); 
 
     _states = new States("WB","West Bengal",false); 
 
     stateList.add(_states); 
 

 

 

 
     dataAdapter = new MyCustomAdapter(this,R.layout.state_info, stateList); 
 
     ListView listView = (ListView) findViewById(R.id.listView1); 
 

 
     listView.setAdapter(dataAdapter); 
 

 

 
    } 
 

 
    private void checkButtonClick() 
 
    { 
 

 
     Button myButton = (Button) findViewById(R.id.findSelected); 
 

 
     myButton.setOnClickListener(new View.OnClickListener() 
 
     { 
 

 
      @Override 
 
      public void onClick(View v) 
 
      { 
 

 
       StringBuffer responseText = new StringBuffer(); 
 
       responseText.append("The following were selected...\n"); 
 

 
       
 

 
       ArrayList<States> stateList = dataAdapter.stateList; 
 

 

 

 
       for(int i=0;i<stateList.size();i++) 
 
       { 
 

 
        States state = stateList.get(i); 
 

 
        if(state.isSelected()) 
 

 
        { 
 

 

 

 
         responseText.append("\n" + state.getName()); 
 

 

 
         // HERE I WANT TO SAVE POSITIONS 
 

 

 

 
        } 
 
       } 
 

 
       Toast.makeText(getApplicationContext(), 
 
         responseText, Toast.LENGTH_LONG).show(); 
 

 
       
 

 

 
      } 
 
     }); 
 
    } 
 

 

 
}
public class MyCustomAdapter extends ArrayAdapter<States> { 
 

 
    public ArrayList<States> stateList; 
 

 
    public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<States> stateList) 
 
    { 
 
     super(context, textViewResourceId, stateList); 
 
     this.stateList = new ArrayList<States>(); 
 
     this.stateList.addAll(stateList); 
 
    } 
 

 
    private class ViewHolder 
 
    { 
 
     TextView code; 
 
     CheckBox name; 
 
    } 
 

 
    @Override 
 
    public View getView(int position, View convertView, ViewGroup parent) 
 
    { 
 

 
     ViewHolder holder = null; 
 

 
     Log.v("ConvertView", String.valueOf(position)); 
 

 
     if (convertView == null) 
 
     { 
 

 
      LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
      convertView = vi.inflate(R.layout.state_info, null); 
 

 
      holder = new ViewHolder(); 
 
      holder.code = (TextView) convertView.findViewById(R.id.code); 
 
      holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
 

 
      convertView.setTag(holder); 
 

 
      holder.name.setOnClickListener(new View.OnClickListener() 
 
      { 
 
       public void onClick(View v) 
 
       { 
 
        CheckBox cb = (CheckBox) v; 
 
        States _state = (States) cb.getTag(); 
 

 
       /* Toast.makeText(getApplicationContext(), "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(), 
 
          Toast.LENGTH_LONG).show();*/ 
 

 
        _state.setSelected(cb.isChecked()); 
 
       } 
 
      }); 
 

 

 

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

 

 
     States state = stateList.get(position); 
 

 

 

 
     holder.code.setText(" (" + state.getCode() + ")"); 
 
     holder.name.setText(state.getName()); 
 
     holder.name.setChecked(state.isSelected()); 
 

 
     holder.name.setTag(state); 
 

 
     return convertView; 
 
    } 
 

 
}
public class States { 
 

 
    String code = null; 
 
    String name = null; 
 
    boolean selected = false; 
 

 
    public States(String code, String name, boolean selected) { 
 
     this.code = code; 
 
     this.name = name; 
 
     this.selected = selected; 
 
    } 
 

 
    public String getCode() { 
 
     return code; 
 
    } 
 

 
    public void setCode(String code) { 
 
     this.code = code; 
 
    } 
 

 
    public String getName() { 
 
     return name; 
 
    } 
 

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

 
    public boolean isSelected() { 
 
     return selected; 
 
    } 
 

 
    public void setSelected(boolean selected) { 
 
     this.selected = selected; 
 
    } 
 
}

+0

因此你的數據庫是你的SharedPreferences?你爲什麼不使用SQLiteDatabase – kggoh

+0

你能告訴我如何保存位置並使用sqlite恢復複選框嗎? –

回答

0

是您的數據將是巨大的?如果是,請使用SQLlite。如果只是像你所說的那樣,只是爲了加載應用程序參數,共享首選項更好。嘗試下面的功能。

public static <T> T readPreference(Class<T> clazz, String key) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Application.getInstance()); 
     if (clazz.equals(String.class)) { 
      return (T) preferences.getString(key, ""); 
     } else if (clazz.equals(Integer.class)) { 
      return (T) (Integer) preferences.getInt(key, 0); 
     } else if (clazz.equals(Boolean.class)) { 
      return (T) (Boolean) preferences.getBoolean(key, false); 
     } else if (clazz.equals(Float.class)) { 
      return (T) (Float) preferences.getFloat(key, -0.0f); 
     } 

     return null; 
    } 

public static void writePreference(String key, Object value) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Application.getInstance()); 
     SharedPreferences.Editor edit = preferences.edit(); 
     if (value instanceof Integer) { 
      edit.putInt(key, (Integer) value); 
     } else if (value instanceof Boolean) { 
      edit.putBoolean(key, (Boolean) value); 
     } else if (value instanceof Float) { 
      edit.putFloat(key, (Float) value); 
     } else if (value instanceof Long) { 
      edit.putLong(key, (Long) value); 
     } else if (value instanceof String) { 
      edit.putString(key, (String) value); 
     } 

     edit.apply(); 
    } 
+0

是的,我的listview數據來自web服務。所以它可能很大。 –

+0

然後你必須使用sqllite:[link] http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ – kggoh