Изменение ориентации макета без взаимодействия с деятельностью - PullRequest
0 голосов
/ 21 октября 2010

Поскольку я работаю с Android, мне интересно, как я могу позволить Android делать все, что касается изменения ориентации (layout против layout-land).

В настоящее время я должен кормить правильное количество столбцов в дБ.и виды на курсор курсора.Это правильный путь или я что-то пропустил?Как вы, ребята, делаете это?

Пожалуйста, взгляните на два SimpleCursorAdapter, где я передаю одно и то же имя макета для обоих существующих макетов (есть в макете и один в макете).Единственное отличие заключается в дополнительном столбце БД "тип" и дополнительном представлении "R.id.activities_row_text3".

Это правильный путь?

Cursor cursor;
SimpleCursorAdapter simpleCursorAdapter = null;
if ((cursor = db.fetchActivities(connection)) != null) {
    startManagingCursor(cursor);
    int orientation = getResources().getConfiguration().orientation; 
    if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        simpleCursorAdapter = new SimpleCursorAdapter(
                                      this,
                                      R.layout.activities_row,
                                      cursor,
                                      new String[] {
                                          "name",
                                          "time" },
                                      new int[] {
                                          R.id.activities_row_text1,
                                          R.id.activities_row_text2 });
    } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        simpleCursorAdapter = new SimpleCursorAdapter(
                                      this,
                                      R.layout.activities_row,
                                      cursor,
                                      new String[] {
                                          "name",
                                          "time",
                                          "type" },
                                      new int[] {
                                          R.id.activities_row_text1,
                                          R.id.activities_row_text2,
                                          R.id.activities_row_text3 });
    }
    if (simpleCursorAdapter != null) {
        setListAdapter(simpleCursorAdapter);
    }
}

1 Ответ

0 голосов
/ 21 октября 2010

Было бы лучше создать simpleCursorAdapter только один раз при запуске Activity. Затем вы можете использовать метод SimpleCursorAdapter.changeCursorAndColumns() (или bindView()), когда происходит изменение ориентации. Вам может потребоваться аннулировать список, чтобы увидеть изменения (notifyDataSetInvalidated()).

Чтобы избежать возобновления активности при изменении ориентации, см. Обработка изменения ориентации самостоятельно

...