Design TabLayout+ViewPager+Fragment,实现选中请求数据+缓存
2015-11-01 16:10
465 查看
新建AndroidStudio工程
android.support.design.widget.TabLayout。
1.首先 compile ‘com.android.support:design:23.0.1’
这是主要的layout resource file,记得添加
xmlns:app=”http://schemas.android.com/apk/res-auto”
app:tabIndicatorColor=”#F7FFAE00” tab指示器颜色
app:tabSelectedTextColor=”#F7FFAE00” 被选中tab标题文字颜色
app:tabTextColor=”#EC000000” 未被选中tab标题文字颜色
app:tabMode=”scrollable” tab模式
2.接下来是Activity、Fragment、Adapter
具体 的注释代码里面有,这是实现选中后去请求数据的基础,网上像这样的例子还说满多的。
新建一个MyFragment,继承LazyFragment,并实现其方法lazyLoad(),请求服务器的逻辑在里面写。newInstance(String s)new新的MyFragment。
给ViewPager新建一个适配器MyViewPagerAdapter
初始化,包括TabLayout标题
String[] titles = new String[8];
为TabLayout添加标题
tabLayout.addTab(tabLayout.newTab().setText(titles[i]), isSelect);
MyFragment个数
MyFragment.newInstance(“” + i)
为ViewPager setAdapter
viewPager.setAdapter(adapter);
接下来就是比较关键的代码了
ViewPager和TabLayout的关联,其实很简单只要两行代码
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabsFromPagerAdapter(adapter);
TabLayout常用的方法:(摘抄至网络)
addTab(TabLayout.Tab tab, int position, boolean setSelected) 增加选项卡到 layout 中
addTab(TabLayout.Tab tab, boolean setSelected) 同上
addTab(TabLayout.Tab tab) 同上
getTabAt(int index) 得到index选项卡
getTabCount() 得到选项卡的总个数
getTabGravity() 得到 tab 的 Gravity
getTabMode() 得到 tab 的模式
getTabTextColors() 得到 tab 中文本的颜色
newTab() 新建个 tab
removeAllTabs() 移除所有的 tab
removeTab(TabLayout.Tab tab) 移除指定的 tab
removeTabAt(int position) 移除指定位置的 tab
setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) 为每个 tab 增加选择监听器,稍候会讲解其回调方法
setScrollPosition(int position, float positionOffset, boolean updateSelectedText) 设置滚动位置
setTabGravity(int gravity) 设置 Gravity(fill填充,center居中)
setTabMode(int mode) 设置 Mode(设置可否滑动,scrollable可滑动)
setTabTextColors(ColorStateList textColor) 设置 tab 中文本的颜色
setTabTextColors(int normalColor, int selectedColor) 设置 tab 中文本的颜色 默认 选中
setTabsFromPagerAdapter(PagerAdapter adapter) 设置 PagerAdapter
setupWithViewPager(ViewPager viewPager) 和 ViewPager 联动
android.support.design.widget.TabLayout。
1.首先 compile ‘com.android.support:design:23.0.1’
<?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=".MainActivity"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="#F7FFAE00" app:tabSelectedTextColor="#F7FFAE00" app:tabTextColor="#EC000000" app:tabMode="scrollable" /> <android.support.v4.view.ViewPager android:id="@+id/view_page" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
这是主要的layout resource file,记得添加
xmlns:app=”http://schemas.android.com/apk/res-auto”
app:tabIndicatorColor=”#F7FFAE00” tab指示器颜色
app:tabSelectedTextColor=”#F7FFAE00” 被选中tab标题文字颜色
app:tabTextColor=”#EC000000” 未被选中tab标题文字颜色
app:tabMode=”scrollable” tab模式
2.接下来是Activity、Fragment、Adapter
package com.example.micyun.mytablayout; import android.support.v4.app.Fragment; /** * Created by MicYun on 15/10/31. */ public abstract class LazyFragment extends Fragment { protected boolean isVisible;//是否可见 /** * 实现Fragment数据的懒加载(此方法在onCreateView()方法之前调用) * @param isVisibleToUser */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } /** * 可见时调用lazyLoad() */ protected void onVisible() { lazyLoad(); } /** * lazyLoad具体实现,继承该类的子Fragment去实现 */ protected abstract void lazyLoad(); /** * 不可见时,空实现 */ protected void onInvisible(){} }
具体 的注释代码里面有,这是实现选中后去请求数据的基础,网上像这样的例子还说满多的。
package com.example.micyun.mytablayout; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; /** * Created by MicYun on 15/10/31. */ public class MyFragment extends LazyFragment { private static String TAG ="MyFragment"; public static String TARGET ="target"; private boolean isPrepared;//是否初始化完成 private LinearLayout linearLayout;//加载中视图 private TextView textView; private String content; static MyFragment newInstance(String s) { MyFragment mf = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString(TARGET, s); mf.setArguments(bundle);//Fragment传递数据方式 return mf; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_layout, null, false); linearLayout = (LinearLayout) v.findViewById(R.id.load_linear); textView = (TextView) v.findViewById(R.id.txt); Bundle args = getArguments(); content = args.getString(TARGET); isPrepared = true; lazyLoad(); return v; } @Override protected void lazyLoad() { if (!isPrepared || !isVisible) return; new Handler().postDelayed(new Runnable() { @Override public void run() { linearLayout.setVisibility(View.GONE); textView.setVisibility(View.VISIBLE); textView.setText("This is " + content + "Fragment"); } }, 3000); } }
新建一个MyFragment,继承LazyFragment,并实现其方法lazyLoad(),请求服务器的逻辑在里面写。newInstance(String s)new新的MyFragment。
package com.example.micyun.mytablayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by MicYun on 15/10/31. */ public class MyViewPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; private String[] titles; public MyViewPagerAdapter(FragmentManager fm, List<Fragment> list, String[] titles) { super(fm); this.list = list; this.titles = titles; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return null != list ? list.size() : 0; } /** * 一定要Override,否则TabLayout标题无文字 * @param position * @return */ @Override public CharSequence getPageTitle(int position) { return titles[position]; } }
给ViewPager新建一个适配器MyViewPagerAdapter
package com.example.micyun.mytablayout; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; private List<Fragment> list; private MyViewPagerAdapter adapter; private boolean isSelect;//是否选中 private String[] titles = new String[8]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout = (TabLayout) findViewById(R.id.tab_layout); viewPager = (ViewPager) findViewById(R.id.view_page); for (int i = 0; i < titles.length; i++) { titles[i] = "Android" + i; } init(); } private void init() { list = new ArrayList<>(); list.clear(); for (int i = 0; i < titles.length; i++) { list.add(MyFragment.newInstance("" + i)); } //添加Tab标题 for (int i = 0; i < titles.length; i++) { if (i == 0) { isSelect = true; } else { isSelect = false; } tabLayout.addTab(tabLayout.newTab().setText(titles[i]), isSelect); Log.i("Android", titles[i]); } if (null == adapter) adapter = new MyViewPagerAdapter(getSupportFragmentManager(), list, titles); viewPager.setAdapter(adapter); //设置缓存View的个数 viewPager.setOffscreenPageLimit(titles.length - 1); //关联TabLayout和ViewPager tabLayout.setupWithViewPager(viewPager); //Tab设置适配器 tabLayout.setTabsFromPagerAdapter(adapter); } }
初始化,包括TabLayout标题
String[] titles = new String[8];
为TabLayout添加标题
tabLayout.addTab(tabLayout.newTab().setText(titles[i]), isSelect);
MyFragment个数
MyFragment.newInstance(“” + i)
为ViewPager setAdapter
viewPager.setAdapter(adapter);
接下来就是比较关键的代码了
ViewPager和TabLayout的关联,其实很简单只要两行代码
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabsFromPagerAdapter(adapter);
TabLayout常用的方法:(摘抄至网络)
addTab(TabLayout.Tab tab, int position, boolean setSelected) 增加选项卡到 layout 中
addTab(TabLayout.Tab tab, boolean setSelected) 同上
addTab(TabLayout.Tab tab) 同上
getTabAt(int index) 得到index选项卡
getTabCount() 得到选项卡的总个数
getTabGravity() 得到 tab 的 Gravity
getTabMode() 得到 tab 的模式
getTabTextColors() 得到 tab 中文本的颜色
newTab() 新建个 tab
removeAllTabs() 移除所有的 tab
removeTab(TabLayout.Tab tab) 移除指定的 tab
removeTabAt(int position) 移除指定位置的 tab
setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) 为每个 tab 增加选择监听器,稍候会讲解其回调方法
setScrollPosition(int position, float positionOffset, boolean updateSelectedText) 设置滚动位置
setTabGravity(int gravity) 设置 Gravity(fill填充,center居中)
setTabMode(int mode) 设置 Mode(设置可否滑动,scrollable可滑动)
setTabTextColors(ColorStateList textColor) 设置 tab 中文本的颜色
setTabTextColors(int normalColor, int selectedColor) 设置 tab 中文本的颜色 默认 选中
setTabsFromPagerAdapter(PagerAdapter adapter) 设置 PagerAdapter
setupWithViewPager(ViewPager viewPager) 和 ViewPager 联动
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories