Передать MatrixCursor данных из действия во фрагмент

Суть этого вопроса заключается в том, как отправить MatrixCursor данных из действия во фрагмент.

Я выполняю свои функции поиска в своей деятельности и возвращаю фрагмент, который содержит список, который будет заполнен данными из ответа на запрос, который является матричным курсором.

Пакет и посылка пока не работают для меня. Любые советы или рекомендации?

2 ответа

Я вижу три возможных варианта.

  1. Попробуйте Gson. Возможно, вы сможете преобразовать экземпляр в строку, чтобы передать его, а затем восстановить его из данных строки. Однако это не работает для всего.

  2. Создайте новый метод в вашем фрагменте. Вы не должны передавать пользовательские аргументы в конструкторе, но вы можете передать их позже:

    private MatrixCursor cursor;
    
    public void setCursor(MatrixCursor cursor) {
        this.cursor = cursor;
    }
    

    Поскольку это тот же экземпляр, изменения, внесенные в ваш фрагмент, будут отражены в вашей активности. Однако это вызовет проблемы, если вы поверните устройство или вызовете другое изменение конфигурации. Чтобы это исправить, добавьте следующее к вашему <activity> укажите в своем манифесте:

    android:configChanges="orientation|keyboardHidden"
    
  3. Фрагменты сохраняют ссылку на родительскую активность. Вы можете добавить вспомогательные методы в свою активность, которые по существу проксируют те, которые вам нужны из вашего экземпляра MatrixCursor:

    public void addRow(Object[] columnValues) {
        cursor.addrow(columnValues);
    }
    
    //etc
    

    Затем в своем фрагменте вы можете сделать:

    ((MyActivityClass) getActivity()).addRow(columnValues);
    

Вариант 3, вероятно, будет лучшим вариантом, поскольку он не полагается на что-то, что может не работать, или на то, что по сути является взломом.

Сделать интерфейс для поиска

public interface Searchable {
     MatrixCursor getSearchResult() 
}

убедитесь, что вы реализуете этот интерфейс в своей деятельности.

public MainActivity extends AppCompatActivity implements Searchable {

    private MatrixCursor mSearchResultMatrixCursor;
    ...
    @Override public MatrixCursor getSearchResult() {
         return mSearchResultMatrixCursor;
    }    
}

В вашем фрагменте onCreate или где вы хотите использовать MatrixCursor,

ты можешь позвонить,

if(getActivity != null && getActivity instanceOf Searchable) {
         MatrixCursor matrixCursor = ((Searchable)getActivity).getSearchResult()
}

Это будет продолжаться до тех пор, пока активность не будет воссоздана.

Другие вопросы по тегам