2014-02-16 4 views
0

Я очень новичок в Android. У меня есть несколько кнопок, когда я нажимаю на них, я получаю список элементов. Независимо от нажатой кнопки, списки отображаются точно так же, единственное, что меняется - это удаленный url, призванный заряжать элементы. Есть ли лучший способ, чем использовать фрагменты для этого? Или можно добавить параметр url в методе getView каждого адаптера (я использую адаптер для каждого фрагмента)передовая практика при использовании фрагментов

ответ

1

Это зависит.

Вы не можете передавать дополнительные аргументы непосредственно в Adapter.getView(), но вы можете передать дополнительную информацию (например, URL-адрес или элементы, которые вы загрузили из этого URL-адреса), в качестве параметра конструктора в подкласс класса Adapter и получить доступ к этому изнутри реализации getView().

Из ограниченного количества деталей, которые вы предоставили, я предлагаю иметь один класс Фрагмента, обрабатывающий отображение вашего списка, и передачу URL-адреса для передачи данных из фрагмента в качестве аргумента в следующих строках:

public class MyListFragment extends Fragment { 

    private static String ARG_URL = "url"; 

    public static MyListFragment create(String url) { 
    Bundle args = new Bundle(); 
    args.putString(ARG_URL, url); 
    MyListFragment fragment = new MyListfragment(); 
    fragment.setArguments(args); 
    return fragment; 
    } 

    ... 
} 

Затем фрагмент может обрабатывать асинхронную загрузку данных и отображение списка.

Что касается наилучшей практики, я склонен скрывать часть создания/аргумента в статическом заводском методе, подобном этому, поэтому код, который хочет использовать фрагмент, не должен знать, как именно аргументы сортируются в Bundle, и вы можете обработать проверку аргументов, значений по умолчанию и т. д., если это необходимо.

+0

спасибо, извините, если следующее довольно наивно, я не очень 'android'. У меня есть прослушиватель вкладок, поэтому, когда я нажимаю одну из вкладок, я вызываю 'фрагментTransaction.replace (R.id. $ some_id, new SomeFragment()). Commit();' am предполагается передать URL в этом экземпляре, а затем передать его в 'onCreateView', который делегирует ваш метод' create'? – Newben

+1

По строкам фрагментаTransaction.replace (R.id. $ some_id, SomeFragment.create (targetUrlForThisTab)). Commit(); Затем вы можете получить доступ к URL-адресу в onCreateView() с помощью getArguments(). Get (ARG_URL). – Karsten

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