Передать MatrixCursor данных из действия во фрагмент - PullRequest
0 голосов
/ 09 октября 2018

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

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

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

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

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

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()
}

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

0 голосов
/ 09 октября 2018

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

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

  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, вероятно, будет лучшим вариантом, поскольку он не полагается на что-то, что может не работать, или на то, что по сути является взломом.

...