TabLayout+ViewPager+Fragment完成滑动界面
2016-04-09 16:05
531 查看
从昨天下午就搞把这三种一起组合,然后就写,但就是不行,快疯了,写了一遍又一遍就是不行,如果看到我文件包名时,你就知道我有多气愤了。今天中午吃饭的时候就突然想起是不是布局出了点什么问题。一瞅,之前我按照官网上的说是用一般使用水平布局,一打ViewPager布局就发现这布局的宽度几乎为0dp的,就是一场竖道。我去,然后换成相对布局,就重新调了调,然后就行了,我都快哭了。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif)
在文件上是两部分一个是Fragment,另一个就是操作了。
我是新建了两个Fragment这就不全贴出来了,上上篇都说了很简单,Fragment有着和Activity 相似的生命周期。用他进行管理操作很简单和Activity只是创建的方法不同。
创建一个布局进行界面显示。
添加 compile 'com.android.support:design:23.2.1' 备用
这样的一个例子就熟悉了操作过程,和管理过程。
把陌生的方法都做注释了,也没啥可说的。
效果:
![](http://img.blog.csdn.net/20160409160336223)
![](http://img.blog.csdn.net/20160409160354535)
下一步就准备做一个大框架 了,将侧滑菜单导航栏和选项卡和浮动Button与RecyclerView CardView都组合在一起,然后再加上一些免费的额接口我的第一个APP要在毕业前做完。
源码: http://download.csdn.net/detail/csdnhejingzhou/9485901
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif)
在文件上是两部分一个是Fragment,另一个就是操作了。
我是新建了两个Fragment这就不全贴出来了,上上篇都说了很简单,Fragment有着和Activity 相似的生命周期。用他进行管理操作很简单和Activity只是创建的方法不同。
创建一个布局进行界面显示。
添加 compile 'com.android.support:design:23.2.1' 备用
1、创建tab_1.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#990033" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Tab_1_Toast" android:id="@+id/button1_Toast" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout>一个Button而已。
2、然后创建一个管理它的类这个类继承Fragment (Tab_Fragment_1)
package com.example.hejingzhou.sb; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; /** * Created by Hejingzhou on 2016/4/9. */ public class Tab_Fragment_1 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View viewTab_1 = inflater.inflate(R.layout.tab_1, container, false); Click(viewTab_1); return viewTab_1; } private void Click(View view) { Button btnToast_1 = (Button) view.findViewById(R.id.button1_Toast); btnToast_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "第一个界面的Button", Toast.LENGTH_SHORT).show(); } }); } }
这样的一个例子就熟悉了操作过程,和管理过程。
3、接下来我们需要在创建主界面的自动创建的main_activity.xml中添加TabLayout和ViewPaget TabLayout是由android.support.design.widget包提供。这就是引入compile 'com.android.support:design:23.2.1'的原因了。
package com.example.hejingzhou.sb; import android.support.annotation.Nullable; 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.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.ViewGroup; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private String TAG = getClass().getSimpleName(); private ViewPager viewPager; private TabLayout tabLayout; private List<Fragment> fragmentsList;//fragment容器 private List<String> titleList;//标签容器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); load();//加载 } private void load() { tabLayout = (TabLayout) findViewById(R.id.tabLayout); viewPager = (ViewPager) findViewById(R.id.viewPager); fragmentsList = new ArrayList<>(); titleList = new ArrayList<>(); fragmentsList.add(new Tab_Fragment_1()); fragmentsList.add(new Tab_Fragment_2());//将fragment添加到fragmentList的list容器里 for (int i = 0; i < 3; i++) { //重复添加 只是填充 没什么用 fragmentsList.add(new Tab_Fragment_1()); } titleList.add("新闻"); titleList.add("笑话"); titleList.add("段子"); titleList.add("视频"); titleList.add("图片"); tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//tab的模式如果标签多的话用MODE_SCROLLABLE 少的话用MODE_FIXED //tabLayout.setBackgroundColor(Color.BLUE); FragViewAdapter adapter = new FragViewAdapter(getSupportFragmentManager(), fragmentsList, titleList); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); tabLayout.setTabsFromPagerAdapter(adapter);//虽然过时了但是不能去掉,去掉后 //如果是滑动操作的话没事,但是使用标签点击的时候就不行了。 /** * @deprecated Use {@link #setupWithViewPager(ViewPager)} to link a TabLayout with a ViewPager * together. When that method is used, the TabLayout will be automatically updated * when the {@link PagerAdapter} is changed. */ /*@Deprecated public void setTabsFromPagerAdapter(@Nullable final PagerAdapter adapter) { setPagerAdapter(adapter, false); }*/ /** * 选择tablayout的监听,一般是用不到的 */ tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { if (tab.getText().equals("新闻")) { Toast.makeText(getApplicationContext(), "滑动或点击了新闻", Toast.LENGTH_SHORT).show(); } if (tab.getPosition() == 1) { Toast.makeText(getApplicationContext(), "滑动或点击了笑话", Toast.LENGTH_SHORT).show(); } } @Override public void onTabUnselected(TabLayout.Tab tab) { if (tab.isSelected()) { Toast.makeText(getApplicationContext(), "切换了Pager", Toast.LENGTH_SHORT).show(); } Log.i(TAG, "tab.getTag()" + tab.getTag()); } @Override public void onTabReselected(TabLayout.Tab tab) { //不知道干啥的 } }); } /** * 创建适配器,主要是为了fragmet与标题进行匹配的 继承FragmentPagerAdapter */ class FragViewAdapter extends FragmentPagerAdapter { List<Fragment> fragmentList_; List<String> titleList_; public FragViewAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) { super(fm); fragmentList_ = fragmentList; titleList_ = titleList; } @Override//fragment匹配 public Fragment getItem(int position) { Log.i(TAG, "getItem " + fragmentList_.get(position)); return fragmentList_.get(position); } @Override//获取fragment的数量 public int getCount() { return titleList_.size(); } @Override//对标题进行匹配 public CharSequence getPageTitle(int position) { Log.i(TAG, "getPageTitle " + titleList_.get(position)); return titleList_.get(position); } @Override//销毁 不知道这样做行不行 public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); fragmentList_.get(position).onDestroy(); } } }
把陌生的方法都做注释了,也没啥可说的。
效果:
下一步就准备做一个大框架 了,将侧滑菜单导航栏和选项卡和浮动Button与RecyclerView CardView都组合在一起,然后再加上一些免费的额接口我的第一个APP要在毕业前做完。
源码: http://download.csdn.net/detail/csdnhejingzhou/9485901
相关文章推荐
- java 递归算法
- ZOJ2314 Reactor Cooling(无源汇流量有上下界网络的可行流)
- 推荐:移动端前端UI库—Frozen UI、WeUI、SUI Mobile
- Struts2源码分析(二)Struts2运行流程分析
- tcp详解学习笔记-tcp建立终止
- 银行家算法
- 手把手教你配置苹果APNS推送服务
- HDU2042
- Java中super的几种用法并与this的区别
- 算法初级_3 :函数与递归
- struts整合之 spring 对于 destroy listen等问题
- tcp链接端口的理解
- poj3253切割木板(哈夫曼树) 贪心【优先队列】
- system.currentTimeMillis() 获得当前的时间
- 实时操作系统
- [Android] 对ImageView设置属性scaleType为FIT_START,如何去掉多余空白
- 正则
- 数据结构第三章课后题
- java.net.BindException: Address already in use: JVM_Bind <null>:8001解决办法
- 计算机网络基础之运输层(带完成)