昨天写的这几篇博客,Android-fragment简介-fragment的简单使用Activity-fragment-ListView展示Android-fragment生命周期Android-fragment的替换, 都是讲解使用 android.app.Fragment 自身的Fragment,不是v4包的;

 

而今天的博客是专门讲解v4.app.Fragment(v4包的),全部都是要导入v4包,使用v4包的Fragment有个好处就是可以兼容低版本

以前的导包:

import android.app.Fragment;
import android.app.FragmentTransaction;

 

现在的导包:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

 


 

 

Activity的代码:

package liudeli.activity.fragment;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;

import liudeli.activity.R;

/**
 * 全部使用v4.app.Fragment支持包来实现
 * 既然用了全部使用v4.app.Fragment支持包来实现,所以Activity必须是FragmentActivity才能识别布局的<fragment
 */
public class MyTestFragmentActivity4 extends FragmentActivity implements View.OnClickListener {

    private Button msg;
    private Button persons;
    private Button my;

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

        initView();
        initChangeFragment();
        initListener();
    }

    private void initView() {
        msg = findViewById(R.id.bt_msg);
        persons = findViewById(R.id.bt_persons);
        my = findViewById(R.id.bt_my);
    }

    /**
     * 初始化默认切换到 消息Fragment
     */
    private void initChangeFragment() {
        /**
         * 得到FragmentManager 要用 v4支持包里面的getSupportFragmentManager
         */
        FragmentManager manager = getSupportFragmentManager();
        // 开始事务 得到事务
        FragmentTransaction fragmentTransaction = manager.beginTransaction();
        // 替换操作
        fragmentTransaction.replace(R.id.frame_layout, new MsgFragment());
        // 提交
        fragmentTransaction.commit();

        setButton(0);
    }

    private void initListener() {
        msg.setOnClickListener(this);
        persons.setOnClickListener(this);
        my.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        /**
         * 得到FragmentManager 要用 v4支持包里面的getSupportFragmentManager
         */
        FragmentManager manager = getSupportFragmentManager();
        // 开始事务 得到事务
        FragmentTransaction fragmentTransaction = manager.beginTransaction();

        Fragment fragment = null;

        switch (v.getId()) {
            case R.id.bt_msg:
                fragment = new MsgFragment();
                setButton(0);
                break;
            case R.id.bt_persons:
                setButton(1);
                fragment = new PersonsFragment();
                break;
            case R.id.bt_my:
                setButton(2);
                fragment = new MyWoFragment();
                break;
        }
        // 替换操作
        fragmentTransaction.replace(R.id.frame_layout, fragment);
        // 提交
        fragmentTransaction.commit();
    }

    /**
     * 设置三个按钮的颜色
     * @param value
     */
    private void setButton(int value) {
        switch (value) {
            case 0:
                msg.setTextColor(Color.RED);
                persons.setTextColor(Color.BLACK);
                my.setTextColor(Color.BLACK);
                break;
            case 1:
                msg.setTextColor(Color.BLACK);
                persons.setTextColor(Color.RED);
                my.setTextColor(Color.BLACK);
                break;
            case 2:
                msg.setTextColor(Color.BLACK);
                persons.setTextColor(Color.BLACK);
                my.setTextColor(Color.RED);
                break;
        }

    }
}

 

Activity布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- 帧布局 下面的LinearLayout已经先填充了,剩下的控件我全部来填充  -->
    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    </FrameLayout>

    <!-- 我的layout_weight默认为0,我先填充我的控件 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_below="@id/frame_layout">

        <Button
            android:id="@+id/bt_msg"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="消息"
            android:gravity="center"
            android:textColor="@android:color/black"
            />

        <Button
            android:id="@+id/bt_persons"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="好友"
            />

        <Button
            android:id="@+id/bt_my"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="我的"
            />

    </LinearLayout>

</LinearLayout>

 

第一个Fragment的代码:

package liudeli.activity.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MsgFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return new ListView(getActivity()); // Fragment不能使用this
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        final String[] data = new String[]{
                "你有一条消息1",
                "你有一条消息2",
                "你有一条消息3",
                "你有一条消息4",
                "你有一条消息5",
                "你有一条消息6",
                "你有一条未读消息6",
                "你有一条未读消息7",
                "你有一条未读消息8",
        };

        ListView listView = (ListView)view;
        ListAdapter listAdapter = new ArrayAdapter(getActivity(),
                                                           android.R.layout.simple_list_item_1,
                                                           android.R.id.text1,
                                                           data);
        listView.setAdapter(listAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

第二个Fragment的代码:

package liudeli.activity.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class PersonsFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return new ListView(getActivity()); // Fragment不能使用this
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        final String[] data = new String[]{
                "张三",
                "李四",
                "王五",
                "赵六",
                "王八",
                "朱九",
                "厨十",
                "阿名",
                "雄霸",
        };

        ListView listView = (ListView)view;
        ListAdapter listAdapter = new ArrayAdapter(getActivity(),
                                                           android.R.layout.simple_list_item_1,
                                                           android.R.id.text1,
                                                           data);
        listView.setAdapter(listAdapter);

        // ListVIew 设置可以解决,Item长按无反应的问题: android:descendantFocusability="blocksDescendants"
        // listView.setDescendantFocusability(2);

        /*listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show();
                return true;
            }
        });*/

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), data[position], Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

第三个Fragment的代码:

package liudeli.activity.fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListAdapter;

public class MyWoFragment extends android.support.v4.app.Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return new GridView(getActivity()); // Fragment不能使用this
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        String[] data = new String[]{
                "我的账号",
                "我的社交",
                "我的简洁",
                "我的钱包",
                "我的设置",
                "退出账号",
                "重置账号"
        };

        GridView gridView = (GridView)view;

        // 设置三列
        gridView.setNumColumns(3);

        ListAdapter listAdapter = new ArrayAdapter(getActivity(),
                                                           android.R.layout.simple_list_item_1,
                                                           android.R.id.text1,
                                                           data);
        gridView.setAdapter(listAdapter);
    }
}

 

效果: