安卓布局 viewpager+tablelayout+fragment

        在谷歌发布Android Design Support Library之前,app底部tab布局的实现方法就有很多种,其中有RadioGroup+FrameLayout、TabHost+Fragment、FragmentPagerAdapter+ViewPager等方法,这些方法我具体使用过RadioGroup和Framlayout联用,通过RadioGroup的点击事件来做Framlayout中几个布局的显示隐藏。下面介绍一种更为方便厉害的方法,tablelayout和viewpager都来自与design包,包括sekbar等控件都来自于它,以及Toolbar,navigationbar等都来自于它,其设计风格简约。design新出了10多个新控件,是谷歌15年新出的,是Design设计风格,风格简约,扁平化,动画加阴影,今天学习的新控件是表格布局:tablelayout,其实有了这个控件大量节约了时间,就是开发逻辑也非常重要,开发的速递也很关键,拓宽开发的领域:

首先介绍下如何导包:右键app——然后open module setting进行导包,(F4快捷键),去dependencise选择旁边那个+号选择第一个,就可以搜索依赖了;当然也可以在bulid_gradle(moudle-app)里面进行导入,但是这种导入可能会出现版本的问题,因为这样很有可能仓库里面本身就没有的。现在在上面的是tablayout。看具体过程

一、首先导入tablayout包,上面已经有了具体的过程

二、现在下面的是用viewpager来装,上面是tablayout两个都可以滑动,如何让两个滑动同步起来同时滑动,这非常重要。

首先看XML中的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.layout.MainActivity">



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"

        >

        <include
            android:id="@+id/include_fram"
            layout="@layout/framlayoutall"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        >
        <include
            layout="@layout/radio_button"
            />
    </LinearLayout>
</LinearLayout>
三、在代码如何将其绑定在一起呢?,tablayout就是有这个方法setupwithviewpager()就可以了
    tabLayout.setupWithViewPager(viewPager);//
四、需要数据源接口了,一个是给tablayout,一个是给viewpager了,就这样就可以了,首先数据源的东西来自于把它装在集合里边用ArrayList集合来装,ArrayList装的对象一个是String,一个是Fragment
private ArrayList<String> tabTitle;
private ArrayList<Fragment> pager_fragment;在这里需要特别注意的fragment导的是app包里面的

public void initDate()
{

    tabTitle=new ArrayList<String>();
    tabTitle.add("歌曲");
    tabTitle.add("专辑");
    tabTitle.add("艺术家");
    tabTitle.add("播放证");
    pager_fragment=new ArrayList<Fragment>();

    fram_0 fram_0=new fram_0();
    pager_fragment.add(fram_0);

    fram_1 fram_1=new fram_1();
    pager_fragment.add(fram_1);
    fram_2 fram_2=new fram_2();
    pager_fragment.add(fram_2);



}
五、新建三个frag_0用来继承Fragment,在这里写了一个,还有两个都是一样的,同时加载一个layout布局就行了
public class fram_0 extends Fragment
{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_0, container, false);
        return view;
    }
}

六、现在数据有了滑动也有了,那么String的数据是如何设置到tablayout里面的呢?fragment如何加载进入viewpager里边开始滑动,String如何加入tablayout实现动态添加呢?数据如何和控件捆在一起呢?在这里需要一个特殊的适配器,这个适配叫做Fragmentpageradapter,注意这个适配器还是非常简单的使用,需要你传入一个FragmentManager,和数据就可以了,然后这个适配会帮助你处理这个FragmentManager来自己管理Fragment的显示和隐藏我知道你现在按的是那个,然后我就将这个进行显示,同时如果不使用第四个方法,就会出现一种情况就是,tablayout没有数据

public class TableAdapter extends FragmentPagerAdapter {
    private ArrayList<String> tabTitle;
    private ArrayList<Fragment> pager_fragment;
    public TableAdapter(FragmentManager fm, ArrayList<String> tabTitle, ArrayList<Fragment> pager_fragment)
    {
        super(fm);
        this.tabTitle=tabTitle;
        this.pager_fragment=pager_fragment;

    }



    @Override
    public Fragment getItem(int position) {
        return pager_fragment.get(position);
    }

    @Override
    public int getCount() {
        return tabTitle.size();
    }
    //如果你需要与你的tablayout,必须重写title方法

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitle.get(position);
    }
}
七、最后需要加载数据,然后将tablayout和viewPager绑定起来,同时,将viewpager绑定上适配器就可以了,

initDate();
tabLayout.setupWithViewPager(viewPager);
TableAdapter adapter=new TableAdapter(getSupportFragmentManager(),tabTitle,pager_fragment);
viewPager.setAdapter(adapter);
 
//这个是完整的activty代码
public class tableActivity extends AppCompatActivity {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ArrayList<String> tabTitle;
    private ArrayList<Fragment> pager_fragment;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table);
        tabLayout=(TabLayout)findViewById(R.id.Tab_content);
        viewPager=(ViewPager)findViewById(R.id.pager_content);
        initDate();
        tabLayout.setupWithViewPager(viewPager);
        TableAdapter adapter=new TableAdapter(getSupportFragmentManager(),tabTitle,pager_fragment);
        viewPager.setAdapter(adapter);
    }
    public void initDate()
    {

        tabTitle=new ArrayList<String>();
        tabTitle.add("歌曲");
        tabTitle.add("专辑");
        tabTitle.add("艺术家");
        pager_fragment=new ArrayList<Fragment>();

        fram_0 fram_0=new fram_0();
        Bundle bundle=new Bundle();
        bundle.putString("tab","我是来自tab的0");
        fram_0.setArguments(bundle);
        pager_fragment.add(fram_0);

        fram_1 fram_1=new fram_1();
        fram_1.setArguments(bundle);
        pager_fragment.add(fram_1);
        fram_2 fram_2=new fram_2();
        fram_2.setArguments(bundle);
        pager_fragment.add(fram_2);



    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android TableLayout is a ViewGroup which displays the data in a tabular form. It is used to create a user interface with rows and columns similar to a spreadsheet. ViewPager is a View which allows the user to swipe left and right to navigate between pages. Fragments are reusable components which can be used to create dynamic user interfaces. To create a TableLayout with ViewPager and Fragment, follow the below steps: 1. Create a new Android Studio project. 2. Add the required dependencies in the build.gradle file. 3. Create a new Fragment class for each tab. 4. Create a layout file for each Fragment. 5. Create a new FragmentPagerAdapter class to manage the Fragments. 6. Create a layout file for the Activity which will contain the TableLayout and ViewPager. 7. Add the TableLayout and ViewPager to the layout file. 8. Initialize the ViewPager in the Activity and set the FragmentPagerAdapter. 9. Create a new TabLayout and add it to the layout file. 10. Add the TabLayout to the ViewPager. Example code: 1. Add the dependencies in the build.gradle file: ``` dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.viewpager2:viewpager2:1.0.0' } ``` 2. Create a new Fragment class for each tab: ``` public class TabFragment extends Fragment { private int tabPosition; public TabFragment(int tabPosition) { this.tabPosition = tabPosition; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_tab, container, false); TextView textView = view.findViewById(R.id.tab_text); textView.setText(getString(R.string.tab_text, tabPosition + 1)); return view; } } ``` 3. Create a layout file for each Fragment: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tab_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:textAppearanceLarge" /> </LinearLayout> ``` 4. Create a new FragmentPagerAdapter class to manage the Fragments: ``` public class TabAdapter extends FragmentStateAdapter { public TabAdapter(FragmentActivity activity) { super(activity); } @Override public Fragment createFragment(int position) { return new TabFragment(position); } @Override public int getItemCount() { return 3; } } ``` 5. Create a layout file for the Activity which will contain the TableLayout and ViewPager: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> ``` 6. Initialize the ViewPager in the Activity and set the FragmentPagerAdapter: ``` public class MainActivity extends AppCompatActivity { private ViewPager2 viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TabLayout tabLayout = findViewById(R.id.tab_layout); viewPager = findViewById(R.id.view_pager); viewPager.setAdapter(new TabAdapter(this)); new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> tab.setText("Tab " + (position + 1)) ).attach(); } } ``` 7. Create a new TabLayout and add it to the layout file: ``` <com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/> ``` 8. Add the TabLayout to the ViewPager: ``` TabLayout tabLayout = findViewById(R.id.tab_layout); viewPager.setAdapter(new TabAdapter(this)); new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> tab.setText("Tab " + (position + 1)) ).attach(); ``` This will create a TableLayout with ViewPager and Fragment. The user can swipe left and right to navigate between tabs. Each tab will display a Fragment with a TextView showing the tab number.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值