Может ли ListView содержать фрагменты

Например, могут ли ЭЛЕМЕНТЫ ListView быть фрагментами. Я знаю, что вы можете назначить TextView XML для ListView, чтобы изменить его внешний вид, но можете ли вы добавить фрагменты в ListView.

Например :У меня есть Фрагмент. XML для указанного фрагмента содержит ImageView, пару больших TextView в стиле -и небольшой TextView в стиле -. Код класса Fragment получает Bundle, а затем на основе содержимого соответственно заполняет TextView и ImageView. И фрагмент XML, и код фрагмента работают без проблем. (Я могу нормально отобразить отдельный фрагмент ). У меня есть FragmentActivity, в котором я хочу отобразить вышеупомянутый список фрагментов. Вот код, который я использую, чтобы попытаться заполнить ListView внутри представления FragmentActivity:

    ArrayList<Fragment> fragList = new ArrayList<Fragment>();
    Fragment fragment = Fragment.instantiate(this, TileItem.class.getName());
    Bundle bundle = new Bundle();
    bundle.putInt("key", 0);
    fragment.setArguments(bundle);
    fragList.add(fragment);

    ArrayAdapter<Fragment> adapter = new ArrayAdapter<Fragment>(this, R.layout.tile_item, fragList);
    listItems.setAdapter(adapter);

Вот мой способ мышления по этому поводу.Я создаю ArrayList of Fragments для хранения всех созданных экземпляров View. Затем я создаю фрагмент, создаю пакет, добавляю данные в пакет (, чтобы фрагмент мог правильно маршалировать данные в свои представления ), добавляю пакет во фрагмент, а затем, наконец, добавляю фрагмент в список массивов. После этого я создаю ArrayAdapter, добавляю макет элемента, который хочу использовать, и список фрагментов, которые я сделал; затем установите ListView для чтения с моего адаптера.

Любой, кто запускает этот код, скорее всего, получит NPE @, создающий экземпляр ArrayAdapter. Что дает? Это вообще возможно? Прежде чем я продолжу ломать голову над этим, может кто-нибудь сказать мне, если я просто трачу свое время? Есть ли способ лучше? Я думал об использовании ScrollView, но многие функциональные возможности ListView должны быть -реализованы заново, и я ненавижу -ненавижу -ненавижу изобретать велосипед, когда в этом нет необходимости.

Спасибо всем, кто читает, и особенно спасибо за ваши мысли, если вы решите оставить их. Я пытался искать установленный ответ на этот вопрос, но все, что я, кажется, нашел, это вопросы/веб-страницы, касающиеся использования ListView ВНУТРИ фрагмента; не использовать фрагменты как элементы ListView

Редактировать :Я воспользовался приведенными ниже предложениями и начал исследовать больше. Судя по тому, как все выглядит, я должен иметь возможность использовать пользовательский адаптер, который увеличивает фрагменты вместо простого построения из XML (из-за отсутствия лучшего способа описать процесс ). Однако моя текущая реализация выдает NPE. при попытке установить адаптер.

Вот код моего пользовательского адаптера (, сокращенный для краткости ):

public class AdapterItem extends ArrayAdapter<Fragment> {

Context c;
List<Fragment> f;

public AdapterItem(Context c, List<Fragment> f) {
    super(c, R.layout.tile_item, f);
    this.c = c;
    this.f = f;
}

@Override
public View getView(int pos, View v, ViewGroup vg) {
    LayoutInflater i = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return i.inflate(R.layout.tile_item, vg, false);
}

. }

и вот как я это реализую:

ArrayList<Fragment> fragList = new ArrayList<Fragment>();
    Fragment fragment = Fragment.instantiate(this, TileItem.class.getName());
    Bundle bundle = new Bundle();
    bundle.putInt("key", 0);
    fragment.setArguments(bundle);
    fragList.add(fragment);

    AdapterItem adapter = new AdapterItem(this, fragList);
    adapter.add(fragment);
    listItems.setAdapter(adapter);

Итак, прошло несколько дней, и я почти уверен, что эта тема была похоронена. Тем не менее, я подумал, что добавлю одно последнее обновление на тот случай, если кто-то захочет попробовать это, и поиск в Google приведет их сюда. Итак, в моей реализации я получаю NPE, когда ListView получает адаптер.Не нужно быть опытным хирургом, чтобы понять, что ошибку выдает адаптер, а не ListView. Хоть убей, я не могу понять почему...

Во всяком случае, я думаю, что у меня есть некоторые идеи. Во-первых, небольшая предыстория :Некоторое время назад я пытался сделать FragmentTransactions внутри FragmentDialog. Каждый раз, когда я пытался это сделать, я получал NPE. В конце концов, в результате долгих исследований я обнаружил, что причина кроется в способе создания фрагментов. Когда вызывается фрагмент, ему нужен контекст от его родителя. Поскольку родителем диалогового окна является действие, которое его запустило, само диалоговое окно не соответствует необходимым критериям. Я считаю, что при попытке добавить фрагменты в ListView это также имеет место. Поскольку ListView не соответствует соглашению с созданием экземпляра фрагмента, он выдает NPE и, таким образом, заставляет меня зависать и возвращаться к соглашениям. Б@мн... Я действительно надеялся, что смогу это сделать. Использование фрагментов вместо простого XML значительно упростило бы организацию/поиск по списку. Ну что ж... думаю, это невозможно сделать, если кому-то интересно.

39
задан user1449018 8 July 2012 в 17:50
поделиться