Как избежать воссоздания представления на onCreate на Android?
у меня естьFragmentActivity
это показывает список контактов.
Вот мойonCreate
метод:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_human_list);
if (findViewById(R.id.human_detail_container) != null) {
// The detail container view will be present only in the
// large-screen layouts (res/values-large and
// res/values-sw600dp). If this view is present, then the
// activity should be in two-pane mode.
mTwoPane = true;
// In two-pane mode, list items should be given the
// 'activated' state when touched.
((HumanListFragment) getSupportFragmentManager()
.findFragmentById(R.id.human_list))
.setActivateOnItemClick(true);
}
if (savedInstanceState == null || !savedInstanceState.getBoolean("displayed_contacts"))
displayContacts();
}
Мой:onSaveInstanceState
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("displayed_contacts", true);
}
И я'Я не уверен, что это актуально, но здесьмойdisplayContacts
так, на всякий случай:
private void displayContacts() {
// Init variables
String[] SelectColumns = new String[] { Contacts._ID, Contacts.DISPLAY_NAME_PRIMARY, Contacts.PHOTO_URI };
String rawContactID, displayName, phoneNumber;
InputStream thumbnailPhoto;
Cursor c, infoC;
// Outer cursor (fetches all contact IDs)
c = getContentResolver().query(
Contacts.CONTENT_URI,
SelectColumns,
Contacts.HAS_PHONE_NUMBER + " = 1 ",
null,
Contacts.DISPLAY_NAME_PRIMARY);
Log.v(getPackageName(), "Found " + (c != null ? c.getCount() : "0") + " contacts");
try {
if (c.moveToFirst()) {
do {
// Columns
rawContactID = c.getString(c.getColumnIndex(SelectColumns[0]));
displayName = c.getString(c.getColumnIndex(SelectColumns[1]));
String[] selectPhone = {CommonDataKinds.Phone.NUMBER};
thumbnailPhoto = openThumbnail(Long.valueOf(rawContactID));
infoC = getContentResolver().query(
CommonDataKinds.Phone.CONTENT_URI,
selectPhone,
CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] {rawContactID},
null
);
infoC.moveToFirst();
phoneNumber = infoC.getString(0);
// Adds items to ListView
HumanContent.addItem(new HumanContent.HumanItem(rawContactID, displayName, phoneNumber != "n/a" ? phoneNumber : "", thumbnailPhoto));
Log.v(getPackageName(), "Cursor position: " + c.getPosition() + ", contact ID: " + rawContactID);
infoC.close();
} while (c.moveToNext());
c.close();
}
displayed_contacts = true;
} catch (Exception e) {
Log.e(getPackageName(), e.getMessage());
}
}
Сейчас здесьэто вещь:
Когда я использую клавишу возврата, чтобы выйти из приложения, а затем снова открыть его с помощью значка; список воссоздает сам себя, даже если он сохраняется в памяти: поэтому я получаю двойной список контактов в одном представлении.
savedInstanceState
в этом случае имеет значение null, поэтому условие if выполнено, но в действительности представление уже имеет мой предыдущий список контактов. Что дает? Как я могу избежать воссоздания списка? Я уже пытался использовать переменные экземпляра, но безрезультатно.
Я также хотел бы избегать повторного создания списка в 100% случаев - если я смогу повторно использовать существующее представление, круто.