2012-04-17 2 views
1

У меня есть классический дизайн с ListFragment с помощью курсора Loader.Как показать/скрыть Виды деятельности из спискаFragment

Есть 2 возможных исходов в основной договоренности -

курсор либо пусто, либо есть данные.

С данными list_row.xml заполнено предметами из базы данных.

Если пусто, я получаю пустой экран, не имеющий информации для пользователя.

У меня есть установка TextView <i>"No records found message"</i>, которая может быть сделана видимой или невидимой из списка. Проблема заключается в следующем:

  1. ListFragment не может получить доступ к представлениям в ListActivity.
  2. Как мне вызвать следующий метод ListActivity из списка?
 
    public void updateView(boolean data) { 

     if (data) {   
      noRecordsFound.setVisibility(View.GONE);  
     } else {    
      noRecordsFound.setVisibility(View.VISIBLE); 
     } 
    } 

Я попытался получить доступ с onLoadFinished в ListFragment, но это не accessble. Любая помощь?

+0

Я не очень понимаю, ваш первый вопрос, так как вид должен быть частью макета вашего фрагмента нет, деятельности, правильно? Что касается переключения «пустого» сообщения: почему бы вам просто не использовать встроенный 'setEmptyView (...)' 'ListView' или' setEmptyText (...) 'из функции« ListFragment »? Первый позволяет вам отображать более сложную иерархию представлений для пустого сообщения, если вам нужно. –

+0

Спасибо, миллион! Это оказалось намного проще, чем я думал. Я использовал 'setEmptyText (...)' 'ListFragment', и он отлично работает! – Lukuluba

+0

Рад слышать. Я также добавил комментарий в качестве ответа, поэтому вы можете принять его и помочь другим людям, которые могут столкнуться с этим потоком из-за аналогичной проблемы. –

ответ

1

Благодаря MH для альтернативного подхода, но я столкнулся с ответом на свой вопрос. Хотя я считаю, что ответ MH является наиболее подходящим для моего случая, я включаю решение того, что я изначально хотел сделать на случай, если кто-то должен использовать его для других вещей, кроме списков.

Ну, я включил if (cursor.getCount() < 1) блок внутри onLoadFinished() курсора Loader, жид так:

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 

    if (cursor.getCount() < 1) { 

     TextView noNotes = (TextView) getActivity().findViewById(R.id.noNotes); 
     noNotes.setVisibility(View.GONE); 
    } 
    adapter.swapCursor(cursor); 
} 
0

В соответствии с ранее комментарий:

Я не очень понимаю, ваш первый вопрос, так как вид должен быть частью макета вашего фрагмента, а не деятельность, правильно?

Что касается переключая «пустое» сообщение: почему вы не просто использовать встроенную функциональность setEmptyView(...) из ListView или setEmptyText(...) из ListFragment (также доступны в опорном libary)? Первый позволяет отобразить более сложную иерархию представлений для пустого сообщения, если вам нужно

+0

Что я имел в виду в первой части вопроса, так это то, что я не мог вызывать метод, объявленный в классе ListActivity, из класса ListFragment. Например. вызывая таким образом 'getActivity(). callMethod (params)' дает ошибку. – Lukuluba

+0

А теперь я понимаю, что вы имеете в виду. Для того, чтобы это сработало, вам нужно было бы привести результат getActivity() 'к вашей конкретной реализации, например.: '((MyActivity) getActivity) .callMethod (params)'. Однако лучшим, более общим подходом является работа с интерфейсами слушателя и регистра активности как слушателя для фрагмента. –

Смежные вопросы