当前位置: 首页 > 知识库问答 >
问题:

Android:在片段中确定选定的actionbar选项卡

贝阳泽
2023-03-14

我正在处理一个项目,其中有数据要在列表视图中显示。我的数据有六个类别,由数据库中包含数字0-5的文本字段标识。我已经创建了一个启用选项卡导航的操作栏。我有所有项目的标签和6个6个类别的每一个共7个标签。

我已经创建了一个ListFragment来显示数据。我为每个选项卡创建了一个ListFragment实例,并通过选项卡监听器更改选项卡。我想通过类别筛选数据,我需要一种方法来确定哪个选项卡实例化了ListFragment。

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      
    }       
}
    @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);
}

任何想法或建议都将不胜感激。

共有1个答案

齐琦
2023-03-14

我认为让每个片段知道它的数字的最好方法是将数字作为参数传递给片段的构造函数。

 类似资料:
  • 我试图在片段中创建自定义listView,我搜索了其他问题,但找不到任何东西。我的列表适配器是这样的 我的片段类是这样的: } 问题是这部分:CustomList adapter=新CustomList(tab1.this,string,imageId);构造函数(public CustomList(活动上下文,字符串[]web,整数[]imageId))只接受活动 我怎样才能解决这个问题?

  • 我有一个应用程序,它使用选项卡进行导航。通过这些选项卡,我在布局中使用和。 我已经在应用程序的主中配置了这些内容。在这里,我为添加了一个页面更改监听器,并更改了关于位置的选项卡。当按下选项卡时,我也会以另一种方式进行操作。这都没问题。 然后我就有了标签中的内容。它们都扩展了类。第一个必须根据设备改变布局。在横向平板电脑()上,我有一个包含两个片段的布局,而其他设备只有一个片段。这是由appiate

  • 添加颜色微调器 更新片段 这是我第一次问问题,我是一名新的程序员,一直在尝试使用kotlin和java的android。我有一个应用程序,允许用户添加一件衣服,选项是通过微调器设置的。问题在于,当用户从保存的微调器中选择一个项目时,以及当我想要更新值时,如图所示,蓝色文字表示棕色是从“添加服装项目”微调器中选择的选项,但微调器显示灰色。是否有办法将微调器设置为棕色,而不是默认值。

  • 我已经实现了ActionBarsherlock的示例com.actionBarsherlock.sample.fragments,所有这些都工作得很好,直到当所选选项卡有子片段时设备方向发生变化。 一切都好: 一切都很好,可以旋转设备没有问题。现在,如果我在Fragment2中选择一个列表项来推入Fragment2Child1,在我旋转设备之前,一切都是好的。 设备旋转时不良: tab1->Fra

  • 我有一个有三个片段的活动。片段A在ActionBar中有1项。片段B在actionbar中有4项,片段C有1项。所以,当我换到片段B时,我想要拆分actionbar,但我不想在A-C片段中拆分action bar,因为没有理由只为一个项目填充屏幕底部的条。 当我在片段之间改变时,我可以改变actionbar模式吗?

  • 我正在使用动作栏和带有片段的选项卡导航。 每个选项卡都包含一个带有列表视图的片段X,当单击列表中的一个项目时,片段X被另一个带有项目详细信息的片段取代。 当我在FragmentY中时,如何设置的Up按钮以加载FragmentX? 文档显示导航应该在之间完成,但的导航选项卡允许在之间导航,而不是。 我错过了什么?

  • 我是一个新生的QA,我在这里尝试编写一个Protractor脚本,从下拉列表中选择一个选项。我的下拉列表中有两个选项,我正在尝试从数字中选择它。 这是我正在使用的代码。 默认情况下,选项 2 在页面加载时处于选中状态。我需要的是从下拉列表中选择选项1。但是,我的代码不会这样做。 下面是选择选项的代码片段。 提前感谢:)