#android #contactscontract
#Android #contactscontract
Вопрос:
Я использую пользовательский адаптер списка для отображения списка всех контактов, и затем пользователь выберет контакты, щелкнув флажок. Какой хороший способ сохранить выбранные контакты в настройках, чтобы я мог протестировать их в другом месте? Я думал об использовании 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>
Активность выбора контактов (некоторый код отредактирован для краткости):
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();
}
}
Ответ №1:
Если все, что вам нужно, это сохранить список объектов (пользователей) Я бы пропустил базу данных и просто создал объект JSON и сохранил его в виде строки в общих настройках. Очевидно, это зависит от того, сколько пользователей вы ожидаете сохранить, но если это несколько сотен или меньше, вы не увидите какой-либо потери производительности, и вы можете избежать всей настройки базы данных.
Ответ №2:
Да, лучший способ — использовать базу данных sql. На самом деле у вас есть только два варианта постоянного хранения данных в Android: sqlite и общие настройки *. Поскольку вы хотите на самом деле сохранить что-то более сложное, одну пару ключ-значение, лучше всего использовать базу данных sqlite. Что касается того, когда сохранять данные, я бы просто запускал хранилище каждый раз, когда элемент проверяется или снимается по отдельности с помощью OnCheckChangedListener.
* Да, есть и другие варианты, но это единственные, которые не так просты в использовании.