Android的充气的标签视图浏览 [英] Android Inflating Views of Tab View

查看:87
本文介绍了Android的充气的标签视图浏览的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要实现我的应用程序这个功能,如下图所示。

  1. 在用行动吧和行动项目活动
  2. 标签下面的动作条
  3. 在每个选项卡中都会有内容的。

我用Tab键片段和TabListeners至code。现在,当我运行的应用程序,我收到标签​​观点,但认为寻呼机和指标缺失。我得到一个活动,如下图所示。

我的code为如下图所示。

TabViewActivity的.java

 公共类TabViewActivity扩展SherlockFragmentActivity {
    公共无效的onCreate(包savedInstanceState){
            super.onCreate(savedInstanceState);

            copyPrivateRawResuorceToPubliclyAccessibleFile();

            动作条动作条= getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            //添加标签
            标签TAB1 =动作条
                    。新标签()
                    .setText(细则)
                    .setTabListener(
                            新TabListener< TabFragment>(这一点,TAB1
                                    TabFragment.class));
            actionBar.addTab(TAB1);

            标签TAB2 =动作条
                    。新标签()
                    .setText(地图)
                    .setTabListener(
                            新TabListener< TabFragment>(这一点,TAB2
                                    TabFragment.class));
            actionBar.addTab(TAB2);

            //检查是否有一个保存的状态来选择活动标签
            如果(savedInstanceState!= NULL){
                getSupportActionBar()。setSelectedNavigationItem(
                        savedInstanceState.getInt(ACTIVE_TAB));
            }
        }
 

TabListener.java

 公共类TabListener<吨延伸SherlockFragment>器物
        ActionBar.TabListener {
    私人SherlockFragment mFragment;
    私人最终SherlockFragmentActivity mActivity;
    私人最终字符串MTAG;
    私人最终类别< T> mClass;

    公共TabListener(活动活动,字符串变量,类< T> CLZ){
        mActivity =(SherlockFragmentActivity)的活动;
        MTAG =标签;
        mClass = CLZ;
    }


    公共无效onTabSelected(TAB键,FragmentTransaction英尺){
        //检查片段已经被初始化
        SherlockFragment preInitializedFragment =(SherlockFragment)mActivity
                。.getSupportFragmentManager()findFragmentByTag(MTAG);
        如果(mFragment!= NULL){
            //如果它存在,只需将它为了显示它
            ft.attach(mFragment);
        }否则,如果(preInitializedFragment!= NULL){
            mFragment = preInitializedFragment;
            ft.attach(mFragment);
        } 其他 {
            //未找到,所以实例化并把它添加到活动
            mFragment =(SherlockFragment)SherlockFragment.instantiate(
                    mActivity,mClass.getName());
            ft.add(android.R.id.content,mFragment,MTAG);
        }
    }

    公共无效onTabUnselected(TAB键,FragmentTransaction英尺){
        如果(mFragment!= NULL){
            //分离的片段,因为另一个被连接
            ft.detach(mFragment);
        }
    }

    公共无效onTabReselected(TAB键,FragmentTransaction英尺){
        //用户选择已经选择的选项卡。通常什么也不做。
    }
 

TabFragment.java

 公共类TabFragment扩展SherlockFragment {
      //您的会员在这里变量
      @覆盖
      公共查看onCreateView(LayoutInflater充气,
                     ViewGroup中的容器,包savedInstanceState){
        //充气的布局该片段
        查看查看= inflater.inflate(R.layout.main,集装箱,假);
        //做你的看法初始化这里
        返回查看;
      }

    }
 

我有两个不同的类别对每个选项卡中单击命名details.java和maps.java。 请帮我在这里把这个code。 我还实施视图寻呼机。这是我的看法呼机code的详细信息选项卡。

DetailsActivity.java

 公共类DetailsActivity扩展BaseSampleActivity {
    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.place_details_layout);

        mAdapter =新TestFragmentAdapter(getSupportFragmentManager());

        mPager =(ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mIndicator =(CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}
 

BaseSampleActivity.java

 公共抽象类BaseSampleActivity扩展FragmentActivity {
    私有静态最后随机RANDOM =新的随机();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    // FragmentTabHost mTab​​Host;


    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单)
    {
        。getMenuInflater()膨胀(R.menu.main,菜单);
        返回true;
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        开关(item.getItemId()){
            案例R.id.random:
                最终诠释页= RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(这一点,更改到页面+页,Toast.LENGTH_SHORT);
                mPager.setCurrentItem(页);
                返回true;

            案例R.id.add_page:
                如果(mAdapter.getCount()小于10){
                    mAdapter.setCount(mAdapter.getCount()+ 1);
                    mIndicator.notifyDataSetChanged();
                }
                返回true;

            案例R.id.remove_page:
                如果(mAdapter.getCount()→1){
                    mAdapter.setCount(mAdapter.getCount() -  1);
                    mIndicator.notifyDataSetChanged();
                }
                返回true;
        }
        返回super.onOptionsItemSelected(项目);
    }
}
 

解决方案

我没有看到任何code在那里为 ViewPager ,检查出的例子从杰克沃顿code <一个href="https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabsPager.java"相对=nofollow> FragmentTabsPager

I want to implement this feature in my app as shown below.

  1. Activity with Action bar and Action Items
  2. Tabs Below the actionbar
  3. Each of the Tabs will have content.

I used Tab fragments and TabListeners to code. Now when i run the app i am getting tab view but the view pager and indicator are missing. i am getting an activity as shown below.

My code is as shown below.

TabViewActivity .java

public class TabViewActivity extends SherlockFragmentActivity {
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            copyPrivateRawResuorceToPubliclyAccessibleFile();

            ActionBar actionBar = getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            // add tabs
            Tab tab1 = actionBar
                    .newTab()
                    .setText("Details")
                    .setTabListener(
                            new TabListener<TabFragment>(this, "tab1",
                                    TabFragment.class));
            actionBar.addTab(tab1);

            Tab tab2 = actionBar
                    .newTab()
                    .setText("Maps")
                    .setTabListener(
                            new TabListener<TabFragment>(this, "tab2",
                                    TabFragment.class));
            actionBar.addTab(tab2);

            // check if there is a saved state to select active tab
            if (savedInstanceState != null) {
                getSupportActionBar().setSelectedNavigationItem(
                        savedInstanceState.getInt(ACTIVE_TAB));
            }
        }

TabListener.java

public class TabListener<T extends SherlockFragment> implements
        ActionBar.TabListener {
    private SherlockFragment mFragment;
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = (SherlockFragmentActivity) activity;
        mTag = tag;
        mClass = clz;
    }


    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment has already been initialised
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity
                .getSupportFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null) {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        } else if (preInitializedFragment != null) {
            mFragment = preInitializedFragment;
            ft.attach(mFragment);
        } else {
            // Not found, so instantiate and add it to the activity
            mFragment = (SherlockFragment) SherlockFragment.instantiate(
                    mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }

TabFragment.java

public class TabFragment extends SherlockFragment {
      // your member variables here
      @Override
      public View onCreateView(LayoutInflater inflater, 
                     ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.main, container, false);
        // do your view initialization here
        return view;
      }

    }

I have two different classes for each tab click named details.java and maps.java. please help me where to place this code. I have also implemented view pager. this is my view pager code for details tab.

DetailsActivity.java

public class DetailsActivity extends BaseSampleActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_details_layout);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}

BaseSampleActivity.java

public abstract class BaseSampleActivity extends FragmentActivity {
    private static final Random RANDOM = new Random();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    //FragmentTabHost mTabHost;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.random:
                final int page = RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(this, "Changing to page " + page, Toast.LENGTH_SHORT);
                mPager.setCurrentItem(page);
                return true;

            case R.id.add_page:
                if (mAdapter.getCount() < 10) {
                    mAdapter.setCount(mAdapter.getCount() + 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;

            case R.id.remove_page:
                if (mAdapter.getCount() > 1) {
                    mAdapter.setCount(mAdapter.getCount() - 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

解决方案

I don't see any code in there for a ViewPager, check out the example code from Jake Wharton's FragmentTabsPager

这篇关于Android的充气的标签视图浏览的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆