我使用自定义列表适配器显示所有联系人的列表,然后用户将通过单击复选框选择联系人。将所选联系人保存到首选项的好方法是什么,以便我可以在其他地方对其进行测试?我在考虑使用SharedPreferences,但到目前为止,我一直无法找到将数组保存到SharedPrefs的方法。我可以去sqlite路线,但考虑到它们已经包含在数据库中,这似乎有点过分,为什么我不能在那里引用它们。只是不确定如何开始这样做...... 此外,我正在考虑将此方法称为onDestroy,尽管这也可能存在一些问题,因此对此的建议也有帮助。这是一些代码(如果你需要更多的话,请告诉我,还有更多) 谢谢你的至高无上的知识。
ListItemLayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/relativelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@android:id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:includeFontPadding="false"
android:paddingBottom="4dip"
android:textSize="15sp"
android:textStyle="normal" />
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:focusable="false"
/>
</RelativeLayout>
</TwoLineListItem>
ContactPicker Activity(为简洁起见,编辑了一些代码):
public class ContactPicker extends ListActivity implements Runnable{
private List<Contact> contacts = null;
private Contact con;
private ContactArrayAdapter cAdapter;
private ProgressDialog prog = null;
private Context thisContext = this;
private CheckBox c1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prog = ProgressDialog.show(this, "Contact List", "Getting Contacts", true, false);
Thread thread = new Thread(this);
thread.start();
final CheckBox c1 = (CheckBox)findViewById(R.id.checkbox);
}
public void run() {...
}
private List<Contact> fillContactsList() {...
}
private Handler handler = new Handler() {...
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
TextView label = ((TwoLineListItem) v).getText2();
String phoneNumber = label.getText().toString();
}
}
答案 0 :(得分:2)
如果你只需要存储一个对象列表(用户),我会跳过数据库并只创建一个JSON对象并将其作为String存储在共享首选项中。它显然取决于您希望存储的用户数量,但如果它是几百或更少,您将不会看到任何类型的性能损失,并且您可以避免处理所有数据库设置。
答案 1 :(得分:1)
是的,你最好的路线是使用sql数据库。在android中你只有两个持久数据存储选项:sqlite和共享首选项*。由于您希望实际存储更复杂的单个键值对,最好的办法是使用sqlite数据库。至于何时存储数据,我只会在每次使用OnCheckChangedListener单独检查或取消选中项目时触发商店。
*是的,还有其他选择,但这些是唯一可以使用的半容易选择。