一、Android中自定义checkbox样式:html
1.首先在drawable文件夹中添加drawable文件checkbox_style.xml。android
<?xml version="1.0" encoding="utf-8"?>app
<selector xmlns:android="http://schemas.android.com/apk/res/android">ide
<item android:drawable="@drawable/checkbox_pressed" android:state_checked="true"/>布局
<item android:drawable="@drawable/checkbox_normal" android:state_checked="false"/>this
<item android:drawable="@drawable/checkbox_normal"/>spa
</selector>.net
2.在values文件夹下的styles.xml文件中添加CustomCheckboxTheme样式。code
<style name="CustomCheckboxTheme" parent="@android :style/Widget.CompoundButton.CheckBox">orm
<item name="android:button">@drawable/checkbox_style</item>
</style>
3.在布局文件中使用CustomCheckboxTheme样式。
<CheckBox
android:id="@+id/select_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/CustomCheckboxTheme" />
使用到的图片资源
checkbox_normal.png
checkbox_pressed.png
原文地址:http://blog.csdn.net/zuolongsnail/article/details/7106586
我是新来这个多重选择 listview
。我想要保存的选中的状态 checkbox
在 listview
,若是用户关闭应用程序,而后再次,打开所选 checkbox
仍保持选中状态。有任何的方式作到这一点。我寻找它,发现它可使用 SharedPreference 但我没有获得有关如何使用它的详细信息。谢谢你
public class MainActivity extends AppCompatActivity { ListView myList; Button getChoice; String[] listContent = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myList = (ListView)findViewById(R.id.list); getChoice = (Button)findViewById(R.id.getchoice); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, listContent); myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); myList.setAdapter(adapter); getChoice.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String selected = ""; int cntChoice = myList.getCount(); SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions(); for(int i = 0; i < cntChoice; i++){ if(sparseBooleanArray.get(i)) { selected += myList.getItemAtPosition(i).toString() + "\n"; } } Toast.makeText(MainActivity.this, selected, Toast.LENGTH_LONG).show(); } }); } }
你能够在保存状态,例如, SharedPreferences
。
因此你 onCreate
和 onDestroy
方法将会看起来像︰
SharedPreferences sharedPreferences = getSharedPreferences("MySharedPrefs", MODE_PRIVATE); @Override protected void onCreate(final Bundle savedInstanceState) { ... Set<String> checkedItemsSource = sharedPreferences.getStringSet("checked_items", new HashSet<String>()); SparseBooleanArray checkedItems = convertToCheckedItems(checkedItemsSource); for (int i = 0; i < checkedItems.size(); i++) { int checkedPosition = checkedItems.keyAt(i); listView.setItemChecked(checkedPosition, true); } } @Override protected void onDestroy() { super.onDestroy(); SparseBooleanArray checkedItems = listView.getCheckedItemPositions(); Set<String> stringSet = convertToStringSet(checkedItems); sharedPreferences.edit() .putStringSet("checked_items", stringSet) .apply(); } private SparseBooleanArray convertToCheckedItems(Set<String> checkedItems) { SparseBooleanArray array = new SparseBooleanArray(); for(String itemPositionStr : checkedItems) { int position = Integer.parseInt(itemPositionStr); array.put(position, true); } return array; } private Set<String> convertToStringSet(SparseBooleanArray checkedItems) { Set<String> result = new HashSet<>(); for (int i = 0; i < checkedItems.size(); i++) { result.add(String.valueOf(checkedItems.keyAt(i))); } return result; }
http://www.itstrike.cn/Question/4e262f3c-cc4a-4968-abe8-3f0675098f63.html