场景
在已构建的Fragment
中需要添加ViewPager
进行多页面轮换显示,并在相应界面设置按钮点击响应。
应用
1. ViewPager初始化
在Fragment
的onCreateView()
周期中进行ViewPager
的创建,具体代码如下。
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
//Fragment界面初始化
View view = inflater.inflate(R.layout.fragment_1, container, false);
//ViewPager初始化,注意是使用Fragment的view加载viewpager控件,否则可能导致viewpager空指针
mViewPager =(ViewPager) view.findViewById(R.id.testviewpager);
//创建一个ArrayList<View>对将要轮转显示的View进行存储
mList = new ArrayList<View>();
//分别对两个View进行加载
View page1 = LayoutInflater.from(getContext()).inflate(R.layout.testlayoutone,null);
View page2 = LayoutInflater.from(getContext()).inflate(R.layout.testlayouttwo,null);
//针对第一个View中的Button进行加载,并设置点击监听。同样是使用page1,即第一个View加载控件
mButton = (TextView) page1.findViewById(R.id.testbutton);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"lasdjfllja;jfd",Toast.LENGTH_LONG).show();
}
});
//将两个page存入到ArrayList<View>中
mList.add(page1);
mList.add(page2);
//如果ViewPager不为空则将适配器Adapter传入,同样是为了防止空指针
if(mViewPager!=null){
mViewPager.setAdapter(new TestAdapter(mList));
//设置当前的pager为第一个Item
mViewPager.setCurrentItem(0);
}
}
2. Adapter创建
接着给出TestAdapter
适配器的创建。
public class TestAdapter extends PagerAdapter {
private ArrayList<View> mLists;
//构造方法,传入ArrayList<view>
public TestAdapter(ArrayList<View> mLists){
this.mLists = mLists;
}
//获取当前List大小
@Override
public int getCount(){
return mLists.size();
}
//往容器中添加list中的View
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mLists.get(position));
return mLists.get(position);
}
//移除容器中的View Item
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mLists.get(position));
}
@Override
public boolean isViewFromObject(View view,Object object){
return view==object;
}
}
3. 布局
同样给出ViewPager
和两个Page
的潦草布局。
- ViewPager
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
//在需要ViewPager的地方加入
<android.support.v4.view.ViewPager
android:id="@+id/testviewpager"
android:layout_width="200dp"
android:layout_height="100dp"
/>
</RelativeLayout>
- Page1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个布局的按钮"
android:textSize="80sp"
android:layout_gravity="center"
android:id="@+id/testbutton"/>
</LinearLayout>
- Page2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="第二个布局"
android:textSize="100sp"/>
</LinearLayout>
其中Page1
中设置了按钮,可以点击响应。
注意点
-
ViewPager
的控件加载需要在父类View
下进行加载,否则可能导致空指针。同样的,按钮控件需要在对应Pager
的View
下进行控件加载。