这两天学主要学习了 Fragment 和 ViewPager, 在看API的时候上边说主要是说配合Fragment一起使用,然后瞅了瞅就敲起来。
本来是左右划动的View连续的,后来发现我强行加了Fragment的时候,他就没有连续的效果了,确实应该是这样的因为我是在直接判断
position后直接跳到Fragment中的,后来通过判断滑动点和偏移量判还是不行。虽然能正常时候,但是没有那种滑动的感觉。蛮不好的感觉,然后找了篇博客
瞅了瞅改了改,挺好的;主要是参考博客: http://blog.csdn.net/lizhenmingdirk/article/details/13631813 大神的。
先看看我改的大神的吧:
一、创建两个Fragment 类并与之关联相应的文件
不大懂的可以参照 我的上一篇 :http://blog.csdn.net/csdnhejingzhou/article/details/51051067。
我的是Page_1_Operation 类和 Page_2_Operation 相对应得文件就是page_1 和 page_2了。很简单,里面各写一个Button 点击做简单的吐司事件。
二、在 mian_layout .xml中添加ViewPager布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.hejingzhou.fragandpage.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</RelativeLayout><span style="color:#ff0000;">
</span>
三、看看MainActivity
package com.example.hejingzhou.fragandpage;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends FragmentActivity {
private ViewPager viewPager;
private ArrayList<Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitViewPager();
}
private void InitViewPager() {
viewPager = (ViewPager)findViewById(R.id.viewPager);
fragmentList = new ArrayList<Fragment>();
Fragment fragment_page_1 = new Page_1_Operation();
fragmentList.add(fragment_page_1);
Fragment fragment_page_2 = new Page_2_Operation();
fragmentList.add(fragment_page_2);
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(viewPagerAdapter);
}
private class ViewPagerAdapter extends FragmentPagerAdapter{
ArrayList<Fragment> listFragment;
public ViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> listFragment) {
//实例参数:ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),fragmentList);
super(fm);
this.listFragment = listFragment;
}
@Override
public Fragment getItem(int position) {
return listFragment.get(position);
}
@Override
public int getCount() {
return listFragment.size();
}
}
}
没有什么麻烦的方法或者类。我们对于ViewPager的适配器一般继承的是PagerAdapter,现在确实继承的是FragmentPagerAdapter 看看API就会明白其实FragmentPagerAdapter是PagerAdapter的子类:
public abstract class FragmentPagerAdapter extends PagerAdapter{}
看看getSupportFragmentManager()这个方法:
/**
* Return the FragmentManager for interacting with fragments associated
* with this activity.
*
*返回相关的交互FragmentManager fragment活动。
*/public FragmentManager getSupportFragmentManager() {
return mFragments.getSupportFragmentManager();
}
比较简单
/*************************************************我之前写的能用就是 效果看起来两个View没有连起来,没有滑动效果****************************************/
package com.example.hejingzhou.viewpageandfragment;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
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.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
private String TAG = getClass().getSimpleName();
List<View> viewList = new ArrayList<View>();/*************************************/
LayoutInflater inflater;//布局填充类
private TabLayout tabLayout;
private Fragment_java_1 fragmentJava1;
private Fragment_java_2 fragmentJava2;
private Fragment_java_3 fragmentjava3;
private ViewPagetAdapter viewPagetAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inflater = getLayoutInflater();
viewList.add(inflater.inflate(R.layout.fragment_layout_1, null));
viewList.add(inflater.inflate(R.layout.fragment_layout_2, null));
viewList.add(inflater.inflate(R.layout.fragment_layout_3, null));
ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPagetAdapter = new ViewPagetAdapter();
viewPager.setAdapter(viewPagetAdapter);
Log.i(TAG,"getCount()-----"+viewPagetAdapter.getCount());
//一加载程序的时候就跳到第一个frgmentJava1中
if (viewPager != null) {
fragmentJava1 = new Fragment_java_1();
addFragment(fragmentJava1, null);
}
/**
* ViewPager的页面改变监听
*/
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.i("??","position----"+position);
Log.i("??","positionOffset----"+positionOffset);
Log.i("??","positionOffsetPixels----"+positionOffsetPixels);
}
@Override
public void onPageSelected(int position) { //页面选择
Log.i(TAG,"position"+position);
switch (position) {
case 0:
fragmentJava1 = new Fragment_java_1();
addFragment(fragmentJava1, "fragment_1");
removeFragment("fragment_2");
removeFragment("fragment_3");
Toast.makeText(getApplicationContext(), "第1张", Toast.LENGTH_SHORT).show();
break;
case 1:
fragmentJava2 = new Fragment_java_2();
addFragment(fragmentJava2, "fragment_2");
removeFragment("fragment_1");
removeFragment("fragment_3");
Toast.makeText(getApplicationContext(), "第2张", Toast.LENGTH_SHORT).show();
break;
case 2:
fragmentjava3 = new Fragment_java_3();
addFragment(fragmentjava3, "fragment_3");
removeFragment("fragment_1");
removeFragment("fragment_2");
Toast.makeText(getApplicationContext(), "第3张", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {//页面滑动状态改变
Log.i(TAG,"state"+state);//重复打印 1 - 2 - 0
}
});
}
/**
* viewPager内部类适配器
*/
private class ViewPagetAdapter extends PagerAdapter {
@Override
public int getCount() {
return viewList.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// ((ViewPager) container).addView(viewList.get(position), 0);
return viewList.get(position);
}
@Override
public void destroyItem(View container, int position, Object object) {
//((ViewPager) container).removeView(viewList.get(position));
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
private void addFragment(Fragment fragment, String tag) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.fragment, fragment, tag);
transaction.commit();
}
private void removeFragment(String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
Log.i(TAG, "------fragment------" + fragment);
if (fragment != null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment);
transaction.commit();
}
}
}
我不认为这个代码有大毛病 ,如果大神能知道怎么修改,将万分感谢。