Как и в случае, могут ли ЭЛЕМЕНТЫ ListView быть фрагментами. Я знаю, что вы можете назначить TextView XML ListView для изменения способа его просмотра, но можете ли вы добавить фрагменты в ListView.
Например: у меня есть фрагмент. XML для упомянутого фрагмента содержит ImageView, пару текстовых файлов большого формата и текстовый TextView небольшого размера. Код класса Fragment получает Bundle, а затем на основе содержимого соответственно заполняется TextViews и 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 для хранения всех моих экземпляров. Затем я создаю фрагмент, создаю Bundle, добавляю данные в Bundle (чтобы Фрагмент мог маршалировать данные в него.), Добавьте Bundle в Fragment, а затем, наконец, добавьте фрагмент в ArrayList. После этого я создаю ArrayAdapter, добавляю макет элемента, который я хочу использовать, и список Фрагментов, которые я сделал; затем установите ListView для чтения из моего адаптера.
Любой, кто запускает этот код, скорее всего, получит NPE @, создающий экземпляр ArrayAdapter. Что дает? Возможно ли это? Прежде чем я продолжаю ломать голову над этим, может кто-то сказать мне, если я просто трачу свое время? Есть ли способ лучше? Я думал об использовании ScrollView, но так много функциональности ListView нужно было бы повторно внедрить, и я ненавижу ненависть-ненависть, изобретая колесо, когда это не нужно.
Спасибо всем, кто читает, и особенно благодарю вас за ваши мысли, если вы решите оставить их. Я попытался найти подходящий ответ на этот вопрос, но все, что мне кажется, это вопросы/веб-страницы, касающиеся использования ListView INSIDE фрагмента; не используя фрагменты КАК ЭЛЕМЕНТЫ 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 и, таким образом, оставляет меня зависанием и возвращается к соглашениям. D @mn... Я действительно надеялся, что смогу это сделать. Использование фрагментов вместо простого XML упростило бы организацию/поиск по списку. О, ну... думаю, это невозможно сделать, если кто-то задается вопросом.