Передать MatrixCursor данных из действия во фрагмент
Суть этого вопроса заключается в том, как отправить MatrixCursor данных из действия во фрагмент.
Я выполняю свои функции поиска в своей деятельности и возвращаю фрагмент, который содержит список, который будет заполнен данными из ответа на запрос, который является матричным курсором.
Пакет и посылка пока не работают для меня. Любые советы или рекомендации?
2 ответа
Я вижу три возможных варианта.
Попробуйте Gson. Возможно, вы сможете преобразовать экземпляр в строку, чтобы передать его, а затем восстановить его из данных строки. Однако это не работает для всего.
Создайте новый метод в вашем фрагменте. Вы не должны передавать пользовательские аргументы в конструкторе, но вы можете передать их позже:
private MatrixCursor cursor; public void setCursor(MatrixCursor cursor) { this.cursor = cursor; }
Поскольку это тот же экземпляр, изменения, внесенные в ваш фрагмент, будут отражены в вашей активности. Однако это вызовет проблемы, если вы поверните устройство или вызовете другое изменение конфигурации. Чтобы это исправить, добавьте следующее к вашему
<activity>
укажите в своем манифесте:android:configChanges="orientation|keyboardHidden"
Фрагменты сохраняют ссылку на родительскую активность. Вы можете добавить вспомогательные методы в свою активность, которые по существу проксируют те, которые вам нужны из вашего экземпляра 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()
}
Это будет продолжаться до тех пор, пока активность не будет воссоздана.