У меня есть базовая таблица в базе данных под названием «Категория». Затем другие две таблицы, называемые категориями 1 и 2, имеют отношение «один ко многим» к таблице категорий. Его, как это: -Настройка ListView два раза в классе фрагментов
**Category Table**
Id Category
0 Category1 (One) -> Category1 Table (Many).
1 Category2 (One) -> Category2 Table (Many).
Я использую Tab менеджер, который будет показывать обе категории из категории таблицы и список элементов в виде списка в одной вкладке с category1 или category2 таблицы, а другой в другой вкладке. Но проблема, с которой я столкнулась, заключается в том, что я пытаюсь установить адаптер в listview на основе инструкции if-else. Таким образом, он показывает только элементы категории1, а не категории2, когда я нажимаю на категорию2 на вкладке. Я знаю, что я не мог установить два адаптера в одном списке на основе исследований, которые я сделал. Есть ли решение? Ниже мой код.
FragmentClass
public class CategoryFragment extends Fragment{
private ListView listView;
private String currentTabTag;
private CategoryAdapter1 categoryAdapter1;
private CategoryAdapter2 categoryAdapter2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate the layout for this fragment
View view = inflater.inflate(R.layout.activity_category_fragment_list, container, false);
// get references to widgets
listView = (ListView) view.findViewById (R.id.prescriptorsListView);
// get the current tab
TabHost tabHost = (TabHost) container.getParent().getParent();
currentTabTag = tabHost.getCurrentTabTag();
// refresh the category list view
refreshCategoryList();
// return the view
return view;
}
public void refreshCategoryList() {
// get category list for current tab from database
Context context = getActivity().getApplicationContext();
CategoryDatabase categoryDatabase = new CategoryDatabase(context);
if(currentTabTag.equals("Category 1")) {
ArrayList<Category1> category1ArrayList = categoryDatabase.getAllCategory1(currentTabTag);
// create adapter and set it in the ListView widget
listView = new Category1Adapter(context, category1ArrayList);
listView.setAdapter(Category1Adapter);
}
else if(currentTabTag.equals("Category 2"))
{
ArrayList<Category2> category2ArrayList = categoryDatabase.getAllCategory2(currentTabTag);
// create adapter and set it in the ListView widget
listView = new Category2dapter(context, category2ArrayList);
listView.setAdapter(Category2Adapter);
}
}
@Override
public void onResume() {
super.onResume();
refreshTaskList();
}
}
Адаптер category1
public class Category1Adapter extends BaseAdapter {
private Context context;
private ArrayList<Category1> category1ArrayList;
public Category1Adapter(Context context, ArrayList<FamilyPrescription> category1ArrayList) {
this.context = context;
this.category1ArrayList = category1ArrayList;
}
@Override
public int getCount() {
return category1ArrayList.size();
}
@Override
public Object getItem(int position) {
return category1ArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Category1TaskLayout taskLayout = null;
Category1 category1 = category1ArrayList.get(position);
if (convertView == null) {
taskLayout = new Category1TaskLayout(context, category1);
} else {
taskLayout = (Category1TaskLayout) convertView;
taskLayout.setCategory1(category1);
}
return taskLayout;
}
}
Адаптер category2 аналогичен выше адаптера.
Любая помощь будет оценена :)
Если у Вас есть один 'ListView' Вы должны использовать один адаптер управления вкладками изменения (' adapter.notifyDataSetChanged () ') – marioosh
Можете ли вы объяснить, как использовать вышеприведенный пример, если это возможно –