我正在一个项目中,我有要在列表视图中显示的数据。我的数据有六个类别,这些类别由数据库中包含数字0-5的文本字段标识。我创建了一个启用了选项卡导航的操作栏。我有所有项目的标签,以及6个六个类别中的每一个,总共有7个标签。
我创建了一个ListFragment来显示数据。我为每个选项卡创建了一个ListFragment的实例,并通过选项卡侦听器更改了选项卡。我想按类别过滤数据,并且我需要一种方法来确定哪个选项卡实例化了ListFragment。
将类别传递给ListFragment的最佳方法是什么?
这是我的MainActivity:
public class MainActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize action bar
final ActionBar actionBar = getSupportActionBar();
// set action bar defaults
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(true);;
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// set up action bar tabs
Tab AllTab = actionBar.newTab().setText("All Items");
Tab Cat0Tab = actionBar.newTab().setText("Category 0");
Tab Cat1Tab = actionBar.newTab().setText("Category 1");
Tab Cat2Tab = actionBar.newTab().setText("Category 2");
Tab Cat3Tab = actionBar.newTab().setText("Category 3");
Tab Cat4Tab = actionBar.newTab().setText("category 4");
Tab Cat5Tab = actionBar.newTab().setText("Category 5");
// create the fragments for each tab
ListFragment allFragment = new ItemListFragment();
ListFragment cat0Fragment = new ItemListFragment();
ListFragment cat1Fragment = new ItemListFragment();
ListFragment cat2Fragment = new ItemListFragment();
ListFragment cat3Fragment = new ItemListFragment();
ListFragment cat4Fragment = new ItemListFragment();
ListFragment cat5Fragment = new ItemListFragment();
// set the tab listener for each tab
AllTab.setTabListener(new MyTabsListener(allFragment));
Cat0Tab.setTabListener(new MyTabsListener(cat0Fragment));
Cat1Tab.setTabListener(new MyTabsListener(cat1Fragment));
Cat2Tab.setTabListener(new MyTabsListener(cat2Fragment));
Cat3Tab.setTabListener(new MyTabsListener(cat3Fragment));
Cat4Tab.setTabListener(new MyTabsListener(cat4Fragment));
Cat5Tab.setTabListener(new MyTabsListener(cat5Fragment));
// Add tabs to action bar
actionBar.addTab(AllTab);
actionBar.addTab(Cat0Tab);
actionBar.addTab(Cat1Tab);
actionBar.addTab(Cat2Tab);
actionBar.addTab(Cat3Tab);
actionBar.addTab(Cat4Tab);
actionBar.addTab(Cat5Tab);
if (savedInstanceState != null) {
actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tabState"));
}
}
class MyTabsListener implements ActionBar.TabListener {
private Fragment fragment;
public MyTabsListener(ListFragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(android.R.id.content, fragment);;
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (fragment != null) {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount()>0) {
fm.popBackStack(fm.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
ft.remove(fragment);
}
}
@Override
public void onTabReselected(Tab tab,FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
这是ItemsListFragment类的onActivityCreated方法:
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
mActivity = getActivity();
db = new DataAdapter(mActivity);
db.open();
// Get all of the records from the database and create the materials ListAdapter
switch(Integer.parseInt(mTag)) {
case 6:
cursor = db.getAllRecords();
break;
default:
cursor = db.getRecordCat(mTag);
break;
}
String[] from = new String[] { DataAdapter.KEY_TITLE };
int[] to = new int[] {R.id.item_title };
// Now create an array adapter and set it to display using our row
items = new MyListAdapter(getActivity(), R.layout.item_cell, cursor, from, to);
// get the listview
ListView listview = getListView();
listview.setAdapter(items);
}
我尝试创建参数并将其附加到每个片段,但它总是返回创建的最后一个片段的编号。我已经研究了回调,但是由于值是动态的(取决于选择了哪个标签),因此我不确定如何进行处理。
任何想法或建议将不胜感激。
我认为使每个片段知道其编号的最佳方法是将数字作为参数传递给该片段的构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句