使用tabLayout实现viewPager+Fragment
效果图如下:
布局:
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/sblue"
app:tabIndicatorColor="@color/gray_63"
app:tabMode="fixed"
app:tabSelectedTextColor="#444"
app:tabTextColor="#fff"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_server"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
适配器
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* Created by l on 2019/4/29.
*/
public class TitleFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList=null;
private String[] titles;
public TitleFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
public TitleFragmentPagerAdapter(FragmentManager mFragmentManager,
ArrayList<Fragment> fragmentList) {
super(mFragmentManager);
mFragmentList = fragmentList;
}
public TitleFragmentPagerAdapter(FragmentManager mFragmentManager,
List<Fragment> fragmentList, String[] titles) {
super(mFragmentManager);
mFragmentList = fragmentList;
this.titles = titles;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
if (position < mFragmentList.size()) {
fragment = mFragmentList.get(position);
} else {
fragment = mFragmentList.get(0);
}
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
if (titles != null && titles.length > 0)
return titles[position];
return null;
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.l.instructordome.adapter.TitleFragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class ServiceFragment extends Fragment {
TabLayout tabLayout;
ViewPager viewpager;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_service,container,false);
init(view);
List<Fragment> fragments = new ArrayList<>();
fragments.add(new LostFoodFragment());
fragments.add(new LostFoodFragment());
fragments.add(new BlankFragment());
TitleFragmentPagerAdapter adapter = new TitleFragmentPagerAdapter(getFragmentManager(), fragments, new String[]{"失物招领", "热门活动", "渤大新闻"});
viewpager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewpager);
return view;
}
private void init(View view) {
tabLayout=(TabLayout)view.findViewById(R.id.tab);
viewpager=(ViewPager)view.findViewById(R.id.viewpager_server);
}
}
注意:这里涉及v4,v7,v13 的导包兼容的问题,我的一直解决方案,改成同一包名
Android Support V4, V7, V13是什么?
本质上就是三个java library。
为什么要有support库?
如果在低版本Android平台上开发一个应用程序,而应用程序又想使用高版本才拥有的功能,就需要使用Support ,这里要经常注意,传递参数要在同一包里。
Android Support v4 是最早(2011年4月份)实现的库。用在Android1.6 (API lever 4)或者更高版本之上。它包含了相对V4, V13大的多的功能。
Android Support v7: 这个包是为了考虑Android2.1(API level 7) 及以上版本而设计的,但是v7是要依赖v4这个包的,也就是如果要使用,两个包得同时 被引用。
Android Support v13:这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
之前在实习中遇到 手势冲突的问题,所以 重写一下ViewPager 取消联动
public class NoSrcollViewPage extends ViewPager{
private boolean isCanScroll = false;
public NoSrcollViewPage(@NonNull Context context) {
super(context);
}
public NoSrcollViewPage(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public boolean isCanScroll() {
return isCanScroll;
}
public void setCanScroll(boolean canScroll) {
isCanScroll = canScroll;
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isCanScroll) {
return super.onTouchEvent(ev);
} else {
return false;
}
}
@Override
public void setCurrentItem(int item, boolean smoothScroll) {
super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
super.setCurrentItem(item);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isCanScroll) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
}