Ich habe eine Basistabelle in der Datenbank namens "Category". Dann haben zwei andere Tabellen namens Category1 und Category2 beide eine Eins-zu-viele-Beziehung mit der Kategorie-Tabelle. Es ist wie folgt: -ListView zweimal in der Fragmentklasse einstellen
**Category Table**
Id Category
0 Category1 (One) -> Category1 Table (Many).
1 Category2 (One) -> Category2 Table (Many).
ich einen Tab-Manager bin mit dem die beiden Kategorien aus der Kategorie-Tabelle und die Liste der Elemente in einer Listenansicht in einem Register von category1 oder category2 Tabelle und die andere zeigt in die andere Registerkarte. Aber das Problem, das ich gegenüberstelle, ist, dass ich versuche, den Adapter auf listview basierend auf einer if-else-Anweisung zu setzen. Es zeigt also nur Kategorie1-Elemente und nicht Kategorie2-Elemente, wenn ich auf der Registerkarte Kategorie2 drücke. Ich weiß, dass ich zwei Adapter in einer einzigen Listenansicht basierend auf den Recherchen, die ich getan habe, nicht einstellen kann. Gibt es eine Lösung? Unten ist mein Code.
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();
}
}
Adapter von 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;
}
}
Der Adapter von category2 ist, auf die oben Adapter ähnlich.
Jede Hilfe würde geschätzt :)
Wenn Sie haben eine 'ListView' Sie sollten einen Adapter verwenden, die Registerkarten Änderungen verwalten (' adapter.notifyDataSetChanged () ') – marioosh
Können Sie erklären, wie Sie das oben mit einem Beispiel verwenden, wenn möglich –