【问题标题】:Not getting the tabbed layout没有获得选项卡式布局
【发布时间】:2017-03-18 06:39:48
【问题描述】:

我想将选项卡式活动显示为一个片段,现在我没有得到选项卡,有没有人可以检查代码并纠正我,因为在过去的几天里我看到这个代码可以工作

这是我的家庭 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.hackerinside.jaisonjoseph.testapp.MainActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">


    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="@dimen/fab_margin"
    app:srcCompat="@android:drawable/ic_dialog_email" />

  </android.support.design.widget.CoordinatorLayout>

这是我要编辑并使其正确的java代码

 package com.hackerinside.jaisonjoseph.testapp;


 import android.os.Bundle;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;


 /**
  * A simple {@link Fragment} subclass.
 */
public class test extends Fragment {




public SectionsPagerAdapter mSectionsPagerAdapter;
public ViewPager mViewPager;



public test() {


}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.fragment_test, null);
    mSectionsPagerAdapter = new  SectionsPagerAdapter (getFragmentManager());
    mViewPager = (ViewPager) rootView.findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);





    return inflater.inflate(R.layout.fragment_test, container, false);



}



public class SectionsPagerAdapter extends FragmentPagerAdapter {

    private SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {


        switch (position)
        {
            case 0:

                tab1 tab1=new tab1();

                return tab1;
            case 1:

                tab2 tab2=new tab2();

                return tab2;


            default:return null;
        }



    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "SECTION 1";
            case 1:
                return "SECTION 2";

        }
        return null;
    }
}


 }

这里是 SectionsPagerAdapter

package com.hackerinside.jaisonjoseph.testapp;

import android.support.v4.app.FragmentManager;
import android.support.v4.view.PagerAdapter;
import android.view.View;

/**
 * Created by Jaison Joseph on 18-03-2017.
 */

class SectionsPagerAdapter extends PagerAdapter {
public SectionsPagerAdapter(FragmentManager fragmentManager) {

}

@Override
public int getCount() {
    return 0;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return false;
}
}

请帮帮我

【问题讨论】:

  • 您是否尝试在每个片段中添加 TabLayout?
  • 是的,不是每个片段,只有一个片段
  • 在您上面的代码中,我看到两个SectionsPagerAdapter 类。它们是什么?
  • 误...只有一个

标签: android class android-fragments


【解决方案1】:

您忘记在Tablayout 中添加标签并在末尾返回rootview

而不是return inflater.inflate(R.layout.fragment_test, container, false);

将您的onCreateView() 更改为:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.fragment_test, container, false);
    mSectionsPagerAdapter = new  SectionsPagerAdapter (getFragmentManager());
    mViewPager = (ViewPager) rootView.findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
    //Adding the tabs using addTab() method
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 2"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(mViewPager);
    return rootView;

}

编辑

对于带有选项卡式活动的导航抽屉:

在您的活动中:

 public class MainActivity extends AppCompatActivity{
    DrawerLayout mDrawerLayout;
    NavigationView mNavigationView;
    FragmentManager mFragmentManager;
    FragmentTransaction mFragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         *Setup the DrawerLayout and NavigationView
         */

             mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
             mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;

        /**
         * Lets inflate the very first fragment
         * Here , we are inflating the TabFragment as the first Fragment
         */

             mFragmentManager = getSupportFragmentManager();
             mFragmentTransaction = mFragmentManager.beginTransaction();
             mFragmentTransaction.replace(R.id.containerView,new TabFragment()).commit();
        /**
         * Setup click events on the Navigation View Items.
         */

             mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
             @Override
             public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();



                 if (menuItem.getItemId() == R.id.nav_item_sent) {
                     FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
                     fragmentTransaction.replace(R.id.containerView,new SentFragment()).commit();

                 }

                if (menuItem.getItemId() == R.id.nav_item_inbox) {
                    FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                    xfragmentTransaction.replace(R.id.containerView,new TabFragment()).commit();
                }

                 return false;
            }

        });

        /**
         * Setup Drawer Toggle of the Toolbar
         */

                android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
                ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name,
                R.string.app_name);

                mDrawerLayout.setDrawerListener(mDrawerToggle);

                mDrawerToggle.syncState();

    }
}

对于 TabFragment:

    public class TabFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 3 ;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /**
         *Inflate tab_layout and setup Views.
         */
            View x =  inflater.inflate(R.layout.tab_layout,null);
            tabLayout = (TabLayout) x.findViewById(R.id.tabs);
            viewPager = (ViewPager) x.findViewById(R.id.viewpager);

        /**
         *Set an Apater for the View Pager
         */
        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        /**
         * Now , this is a workaround ,
         * The setupWithViewPager dose't works without the runnable .
         * Maybe a Support Library Bug .
         */

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                    tabLayout.setupWithViewPager(viewPager);
                   }
        });

        return x;

    }

    class MyAdapter extends FragmentPagerAdapter{

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        /**
         * Return fragment with respect to Position .
         */

        @Override
        public Fragment getItem(int position)
        {
          switch (position){
              case 0 : return new PrimaryFragment();
              case 1 : return new SocialFragment();
              case 2 : return new UpdatesFragment();
          }
        return null;
        }

        @Override
        public int getCount() {

            return int_items;

        }

        /**
         * This method returns the title of the tab according to the position.
         */

        @Override
        public CharSequence getPageTitle(int position) {

            switch (position){
                case 0 :
                    return "Primary";
                case 1 :
                    return "Social";
                case 2 :
                    return "Updates";
            }
                return null;
        }
    }

}

这里是详细信息Implementation

【讨论】:

  • 我知道了,它看起来很奇怪
  • 我会添加截图看看我的问题
  • 我已经编辑了答案添加tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
  • 添加 tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);片段是全屏的,但标签很小
  • 我知道了,但是当我从导航抽屉选项卡中按下相机选项时,移动不顺畅,这是我的颂歌 if (id == R.id.nav_camera) { test home_fragment=new test( ); android.support.v4.app.FragmentManager manager=getSupportFragmentManager(); manager.beginTransaction().replace(R.id.hello, home_fragment,home_fragment.getTag()).commit(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
相关资源
最近更新 更多