2012-03-22 86 views
0

我已經實現了具有多個佈局的多個複選框的應用程序。當用戶未選中相關的複選框時,我看不到佈局。然後我試圖在用戶重新啓動應用程序時保存內容和設置。如何保存android內容視圖的修改內容?

我已經實現的代碼如下:

public class MultipleControllsActivity extends Activity { 
/** Called when the activity is first created. */ 

LinearLayout l1,l2,l3; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    l1 = ((LinearLayout)findViewById(R.id.linearLayout1)); 
    l2 = ((LinearLayout)findViewById(R.id.linearLayout2)); 
    l3 = ((LinearLayout)findViewById(R.id.linearLayout3)); 

    ((CheckBox)findViewById(R.id.checkBox1)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      if(!isChecked){ 
      l1.setVisibility(View.GONE);  
      } 
     } 
    }); 


    ((CheckBox)findViewById(R.id.checkBox2)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      l2.setVisibility(View.GONE); 
     } 
    }); 


    ((CheckBox)findViewById(R.id.checkBox3)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      l3.setVisibility(View.GONE); 
     } 
    }); 


    ((Button)findViewById(R.id.saveTemp)).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      //Save the content code here 

     } 
    }); 

} 

}

當我在saveTemp按鈕點擊的話,我想保存的內容,如果用戶重新啓動應用程序,然後保存的內容將會出現。

請任何機構幫我...

+0

能否請你更形象地解釋你的問題。根據我的理解,您想要存儲CheckBox的狀態,以便下次用戶啓動應用程序時它應該以原樣啓動。這是對的還是你的意思是別的? – 2012-03-22 07:22:28

+0

是的,我的意思是 – 2012-03-22 08:22:20

回答

3

您可以使用

SharedPreferences

http://developer.android.com/reference/android/content/SharedPreferences.html

使用: -

 public class MultipleControllsActivity extends Activity { 
    /** Called when the activity is first created. */ 

    LinearLayout l1,l2,l3; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    SharedPreferences pref_settings; 
    pref_settings = getSharedPreferences("DATA", Context.MODE_PRIVATE); 
     l1 = ((LinearLayout)findViewById(R.id.linearLayout1)); 
     l2 = ((LinearLayout)findViewById(R.id.linearLayout2)); 
     l3 = ((LinearLayout)findViewById(R.id.linearLayout3)); 
l1.setVisibility(pref_settings.getInt("l1", 0)); 
l2.setVisibility(pref_settings.getInt("l2", 0)); 
l2.setVisibility(pref_settings.getInt("l3", 0)); 

     ((CheckBox)findViewById(R.id.checkBox1)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       if(!isChecked){ 
       l1.setVisibility(View.GONE);  
       } 
      } 
     }); 


     ((CheckBox)findViewById(R.id.checkBox2)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       l2.setVisibility(View.GONE); 
      } 
     }); 


     ((CheckBox)findViewById(R.id.checkBox3)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       l3.setVisibility(View.GONE); 
      } 
     }); 


     ((Button)findViewById(R.id.saveTemp)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       SharedPreferences pref_settings; 
    pref_settings = getSharedPreferences("DATA", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = pref_settings.edit(); 


       editor.putInt("l1", l1.getVisibility()); 
    editor.putInt("l2", l2.getVisibility()); 
    editor.putInt("l3", l3.getVisibility()); 

       editor.commit(); 

      } 
     }); 

    } 
0

下面是一個例子我使用多選列表視圖實現了什麼,甚至是t霍夫我不使用複選框直接你可能會得到一個輕微的想法如何繼續.. 您可以保存您的喜好這樣的...

public void SaveSelections() { 
    SharedPreferences sp = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor prefEditor = sp.edit(); 
    String savedItems = getSavedItems(); 
    prefEditor.putString(LOAD_LIST, savedItems); 
    prefEditor.commit(); 
} 

private String getSavedItems() { 
    String savedItems = ""; 
    int count = listView.getAdapter().getCount(); 
    for (int i = 0; i < count; i++) { 
     if (listView.isItemChecked(i)) { 
      if (savedItems.length() > 0) { 
       savedItems += "," + listView.getItemAtPosition(i); 
      } else { 
       savedItems += listView.getItemAtPosition(i); 
      } 
     } 
    } 
    return savedItems; 
} 

這裏是加載您的選擇的方法..

private void LoadSelections() { 
     SharedPreferences sp = getPreferences(MODE_PRIVATE); 
     if (sp.contains(LOAD_LIST)) { 
      String savedItems = sp.getString(LOAD_LIST, ""); 
      this.selectedItems.addAll(Arrays.asList(savedItems.split(","))); 
      int count = this.listView.getAdapter().getCount(); 
      for (int i = 0; i < count; i++) { 
       String currentItem = (String) listView.getAdapter().getItem(i); 
       if (this.selectedItems.contains(currentItem)) { 
        this.listView.setItemChecked(i, true); 
       } 

      } 
     } 
    } 

然後在OnCreate中調用LoadSelections()這樣使...

Bundle b = new Bundle(); 
checkedItems = listView.getCheckedItemPositions(); 
final int checkedItemsCount = checkedItems.size(); 
lst = new ArrayList<String>(); 
for (int i = 0; i < checkedItemsCount; ++i) { 
// This tells us the item position we are looking at 
final int position = checkedItems.keyAt(i); 
final String str2 = (String) listView.getItemAtPosition(position); 
lst.add(str2); 
} 
SaveSelections(); 

最後調用LoadSelections在OnCreate中這樣

LoadSelections();