Android--Fragment的使用(二)-滑动Fragment的使用

33 篇文章 0 订阅

 因为使用官方提供的TabActivity模板搞了很久,都无法完成在Frament里面绑定广播和注册一个服务。于是就使用了这个可以有同样效果的单Activity和多Fagment滑动效果。

  • MainActivity.java
  • MainViewPager.java
  • oneFragment.java
  • twoFragment.java
  • ……java

MainActivity.java

public class MainActivity extends FragmentActivity {

    public MainViewPager viewPager;
    public List<Fragment> fragments = new ArrayList<Fragment>();
    private FragmentManager fragmentManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragments.add(new oneFragment());
        fragments.add(new twoFragment());
        fragments.add(new threeFragment());
        fragments.add(new fourFragment());

        fragmentManager = this.getSupportFragmentManager();

        viewPager = (MainViewPager) findViewById(R.id.viewPager);
        //viewPager.setSlipping(false);//设置ViewPager是否可以滑动
        viewPager.setOffscreenPageLimit(4);
        viewPager.setAdapter(new MyPagerAdapter());
    }

    private class MyPagerAdapter extends PagerAdapter {
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

        @Override
        public int getCount() {
            return fragments.size();
        }

        @Override
        public void destroyItem(View container, int position, Object object) {
            ((ViewPager) container).removeView(fragments.get(position)
                    .getView());
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Fragment fragment = fragments.get(position);
            if (!fragment.isAdded()) { // 如果fragment还没有added
                FragmentTransaction ft = fragmentManager.beginTransaction();
                ft.add(fragment, fragment.getClass().getSimpleName());
                ft.commit();
                /**
                 * 在用FragmentTransaction.commit()方法提交FragmentTransaction对象后
                 * 会在进程的主线程中,用异步的方式来执行。
                 * 如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。
                 * 要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。
                 */
                fragmentManager.executePendingTransactions();
            }

            if (fragment.getView().getParent() == null) {
                container.addView(fragment.getView()); // 为viewpager增加布局
            }
            return fragment.getView();
        }
    };
}

MainViewPager.java


/**
 * Created by yuanlifu on 2017/4/23.
 */

public class MainViewPager extends ViewPager{

    private boolean isSlipping = true;//可滑动标志位

    public MainViewPager(Context context) {
        super(context);
    }

    public MainViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        if (!isSlipping) {
            return false;
        }
        return super.onInterceptTouchEvent(arg0);
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        if (!isSlipping) {
            return false;
        }
        return super.onTouchEvent(arg0);
    }

    /**
     *@Title: setSlipping
     *@Description: TODO设置ViewPager是否可滑动
     *@param isSlipping
     */
    public void setSlipping(boolean isSlipping) {
        this.isSlipping = isSlipping;
    }
}

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainweixin"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#eee"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        <com.example.wo.mycradle.MainViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </LinearLayout>


</RelativeLayout>

oneFragment.java

public class oneFragment extends Fragment {


    private static final String TAG = "liefyuan";

    private TextView aVuale_babyTemp;
    private TextView aVuale_babyWeight;
    private TextView aVuale_babyEnvirTemp;
    private TextView aVuale_babyEnvirHum;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        System.out.println("AAAAAAAAAA____onCreateView");
        return inflater.inflate(R.layout.fragment_one, container, false);
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        MainActivity activity = (MainActivity) getActivity();

        View fragment0View = activity.fragments.get(0).getView();

        aVuale_babyTemp = (TextView) fragment0View.findViewById(R.id.temp_vaule);
        aVuale_babyWeight = (TextView) fragment0View.findViewById(R.id.weight_vaule);
        aVuale_babyEnvirTemp = (TextView) fragment0View.findViewById(R.id.baby_envir_temp);
        aVuale_babyEnvirHum = (TextView) fragment0View.findViewById(R.id.baby_envir_hum);

        mainFragmentHandler();

        System.out.println("AAAAAAAAAA____onActivityCreated");
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        System.out.println("AAAAAAAAAA____onAttach");
    }

    @Override
    public void onStart() {
        super.onStart();
        System.out.println("AAAAAAAAAA____onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        System.out.println("AAAAAAAAAA____onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        System.out.println("AAAAAAAAAA____onPause");
    }



    @Override
    public void onStop() {
        super.onStop();
        System.out.println("AAAAAAAAAA____onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        System.out.println("AAAAAAAAAA____onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("AAAAAAAAAA____onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        System.out.println("AAAAAAAAAA____onDetach");
    }


    private void mainFragmentHandler(){

        aVuale_babyTemp.setText("37.5");
        aVuale_babyWeight.setText("10");
        aVuale_babyEnvirTemp.setText("21"+"度");
        aVuale_babyEnvirHum.setText("75"+"%");
    }
}

twoFragment.java

public class twoFragment extends Fragment {

    private static final String TAG = "liefyuan";


    private TextView bVuale_Someking;
    private TextView bVuale_BedTemp;
    private TextView bVuale_EnvirTemp;
    private TextView bVuale_EnvirHum;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        System.out.println("BBBBBBBBBBB____onCreateView");
        return inflater.inflate(R.layout.fragment_two, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        MainActivity activity = (MainActivity) getActivity();

        View fragment1View = activity.fragments.get(1).getView();//不同的次Fragment有不同的值

        bVuale_Someking  = (TextView) fragment1View.findViewById(R.id.somking_value);
        bVuale_BedTemp = (TextView) fragment1View.findViewById(R.id.bed_value);
        bVuale_EnvirTemp = (TextView) fragment1View.findViewById(R.id.envir_temp_value);
        bVuale_EnvirHum = (TextView) fragment1View.findViewById(R.id.envir_hum_value);

        secondFragmentHandler();
        System.out.println("BBBBBBBBBB____onActivityCreated");
    }


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        System.out.println("BBBBBBBBBBB____onAttach");
    }

    @Override
    public void onStart() {
        super.onStart();
        System.out.println("BBBBBBBBBBB____onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        System.out.println("BBBBBBBBBBB____onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        System.out.println("BBBBBBBBBBB____onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        System.out.println("BBBBBBBBBBB____onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        System.out.println("BBBBBBBBBBB____onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("BBBBBBBBBBB____onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        System.out.println("BBBBBBBBBBB____onDetach");
    }

    private void secondFragmentHandler(){
        bVuale_Someking.setText("250");
        bVuale_BedTemp.setText("38");
        bVuale_EnvirTemp.setText("21");
        bVuale_EnvirHum.setText("78");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值