【发布时间】:2016-12-16 21:39:54
【问题描述】:
我在数据库中有一个名为“类别”的基本表。那么另外两个表Category1 和Category2 都和category 表是一对多的关系。它是这样的:-
**Category Table**
Id Category
0 Category1 (One) -> Category1 Table (Many).
1 Category2 (One) -> Category2 Table (Many).
我正在使用选项卡管理器,它将显示类别表中的两个类别以及列表视图中的项目列表,该选项卡在 category1 或 category2 表的一个选项卡中,另一个在另一个选项卡中。但我面临的问题是我试图根据 if-else 语句在 listview 上设置适配器。因此,当我按下选项卡上的 category2 时,它只显示 category1 项目而不是 category2 项目。 我知道根据我所做的研究,我不能在一个列表视图中设置两个适配器。有什么解决办法吗?下面是我的代码。
片段类
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()) -
如果可能的话,你能解释一下如何使用上面的例子吗
标签: android mysql listview android-fragments