使用SherlockFragment和SherlockTabs时如何填充列表

时间:2012-09-13 07:41:07

标签: android android-fragments actionbarsherlock

我使用此功能创建了我的标签:

public class MyTaber extends SherlockFragmentActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener{

TabHost mTabHost;
private Tab1MyFirstTab frgTabMyFirstTab;
private Tab2Recipes frgTabRecipes;
private Tab3Products frgTabProducts;
private Tab4FAQ frgTabFAQ;
private Tab5Settings frgTabSettings;

private ViewPager mViewPager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myview);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(new MainPagerAdapter(
            getSupportFragmentManager()));
    mViewPager.setOnPageChangeListener(this);
    mViewPager.setPageMarginDrawable(R.drawable.border);
    mViewPager.setPageMargin(16);
    final ActionBar actionBar = getSupportActionBar();
    getSupportActionBar().setDisplayShowHomeEnabled(false);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.addTab(actionBar.newTab().setText(R.string.tab_myfirsttab_title)
            .setTabListener(this).setIcon(R.drawable.ic_tab1_inactive));
    actionBar.addTab(actionBar.newTab().setText(R.string.tab_recipes_title)
            .setTabListener(this).setIcon(R.drawable.ic_tab2_inactive));
    actionBar.addTab(actionBar.newTab().setText(R.string.tab_products_title)
            .setTabListener(this).setIcon(R.drawable.ic_tab3_inactive));
    actionBar.addTab(actionBar.newTab().setText(R.string.tab_faq_title)
            .setTabListener(this).setIcon(R.drawable.ic_tab4_inactive));
    actionBar.addTab(actionBar.newTab()
            .setText(R.string.tab_settings_title).setTabListener(this).setIcon(R.drawable.ic_tab5_inactive));
}

private class MainPagerAdapter extends FragmentPagerAdapter {
    public MainPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            return (frgTabMyFirstTab = new Tab1MyFirstTab());

        case 1:
            return (frgTabRecipes = new Tab2Recipes());

        case 2:
            return (frgTabProducts = new Tab3Products());

        case 3:
            return (frgTabFAQ = new Tab4FAQ());

        case 4:
            return (frgTabSettings = new Tab5Settings());

        }
        return null;
    }

使用SherlockFragment以类似的方式创建每个标签:

public class Tab3Products extends SherlockFragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater.inflate(R.layout.tab3products, container, false);

    /*
    ListView list = (ListView) view.findViewById(R.id.lvMySpecialList);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, mySpecialKeys);
    list.setAdapter(adapter);
    */
    return view;

}

问题是。

  1. 我的第一个标签需要有2个部分,上部应该是带有2个幻灯片的滑块,下部应该是包含3个项目的列表。如何在片段内扩充列表。我已经尝试过使用ArrayAdapter(正如你在评论代码中看到的那样),并从StringArray中获取字符串,但是我的应用程序崩溃了所有的android.View.coreographer问题。

  2. 当我点击第一个列表时项目整个Tab1需要将布局更改为类似的halfimage / half列表,但它需要是不同的片段或活动。

    1. 因为2. - 我应该使用SherlockFragment(就像我一样)或SherlockFragmentActivity来处理我的碎片吗?
  3. 所以,如果有人现在可以提供帮助,因为标准列表和填写它们不起作用,显然我缺少一些知识片段如何工作以及如何在同一个标​​签中启动不同的片段/活动。

1 个答案:

答案 0 :(得分:0)

您无法在片段中添加片段,因为您无法在活动中添加活动。你的方法很好。用于管理片段的fFragmentActivity是可以的

如果您想在FragmentActivity中更改片段,则需要添加/替换示例:

AlbumGridFragment fragment = new AlbumGridFragment();
                getActivity().getSupportFragmentManager().beginTransaction().setCustomAnimations(R.animator.anim_back_right, R.animator.anim_back_left, R.animator.anim_left, R.animator.anim_right)
                .replace(R.id.album_fragment, fragment).addToBackStack(MainFragmentActivity.ALBUM_GRID_TAG).commit();

这将用一个专辑列表替换该片段,片段包含来自一个专辑的图像网格,并带有动画。 (你可以用“添加”来做同样的事情 >将片段放在另一个上面

希望有所帮助