【概述】
在微信中,拖动就可以转换视图。这是如何实现的呢?
其实这并不难,用到ViewPager和Fragment的结合就可以了。
今天就将这一部分的代码敲出。
【在xml中加入】
在需要的地方加入ViewPager标签,这里将layout_height设置为0dp,并且将weight设置为1。这样在后来再在底部添加底部图标时,ViewPager都将占据剩余的空间。
<android.support.v4.view.ViewPager
android:id="@+id/id_viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</android.support.v4.view.ViewPager>
【设置Fragment】
Fragment是我们要现实内容的主要容器(它将成为被ViewPager调用的对象)。
新建一个类TabFragment
//注意这里会导入Fragment的包。但是要注意这个Fragment的包是存在于v4而不是app中的。
public class TabFragment extends Fragment {
private static final String TAG="TabFragment";
private String mTitleString="Default";
public static String TITLE="title";
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if(getArguments()!=null){
mTitleString=getArguments().getString(TITLE);
}
TextView tv=new TextView(getActivity());
tv.setTextSize(30);
tv.setBackgroundColor(Color.WHITE);
tv.setText(mTitleString);
Log.d(TAG,(String) tv.getText());
return tv;//默认返回一个textView就可以了 不用再编写别的xml了
}
}
【在MainActivity中对新建一个TabFragment的List并且进行初始化】
//这些代码在原代码并非是连贯的
//用来初始化的药渣
private String[] mTitles = new String[]
{ "First Fragment !", "Second Fragment !", "Third Fragment !","Fourth Fragment !" };
//TabFragment的List
private List<TabFragment> mTabs=new ArrayList<TabFragment>();
//设置初始化函数
private void init(){
for(String title:mTitles){
//设置一个bundle用来承载数据
Bundle bundle=new Bundle();
bundle.putString(TabFragment.TITLE,title);
//初始化一个新的TabFragment,并且设置参数为bundle
TabFragment fragment=new TabFragment();
fragment.setArguments(bundle);
//添加入List中去
mTabs.add(fragment);
}
}
【获取ViewPager并且为其设置适配器】
既然已经有了内容,接下来就应该为这些TabFragment安置一个家了————这当然就是我们刚才所设置的ViewPager了!
//以下代码并不连贯
//获取到ViewPager
private ViewPager mViewPager;
mViewPager=(ViewPager)findViewById(R.id.id_viewpager);
//设置一个适配器,为ViewPager供上电!
private FragmentPagerAdapter mAdapter;
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
//注意这个函数的参数应该是一个FragmentManager,这就需要我们的Activity继承的是FragmentActivity;
@Override
public int getCount() {
// TODO Auto-generated method stub
return mTabs.size();
}
@Override
public Fragment getItem(int arg0) {
return mTabs.get(arg0);
}
};
mViewPager.setAdapter(mAdapter);
【这样就完成了】
我们看到Fragment和ViewPager的结合,其实只是在ViewPager中使用了fragment返回的view来填充
两个关键的结点分别是ViewPager的适配器FragmentPagerAdapter的方法getItem()和Fragment中的方法onCreateView()
版权声明:本文为博主原创文章,转载请标明出处。