码迷,mamicode.com
首页 > 其他好文 > 详细

Fragment的使用

时间:2016-05-07 08:03:30      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

Fragment:Fragment是一种可以嵌入到Ui中的片段,他能让程序更加合理和充分地利用大屏幕空间,并且在平板上应用的非常广泛

下面介绍一个简单的Fragment的实现,并且实现在Fragment和Activity中的数据传递,在写代码前先看一下实现的效果


演示效果1:通过点击不同的按钮切换到不同的Fragment

技术分享


演示效果2:Activity中发送数据到Fragment

技术分享


演示效果3:Fragment发送数据到Activity

技术分享


实现方式:

第一步:使用Android Studio创建一个Android工程,修改activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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.fyt.fragment.MainActivity"
    android:orientation="horizontal">

    <FrameLayout
        android:id="@+id/fl"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </FrameLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="fragment01"
            android:onClick="click1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="fragment02"
            android:onClick="click2"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="fragment03"
            android:onClick="click3"/>

        <EditText
            android:id="@+id/et_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="传递数据"
            android:onClick="click4"/>

    </LinearLayout>

</LinearLayout>


第二步:在布局文件夹中新建一个fragment01.xml文件,并且在fragment01.xml中添加下面的代码

<?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"
    android:background="#ff0000">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="热情的红色"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/fg_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/fg_bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送数据"/>

</LinearLayout>


第三步:在布局文件夹中新建一个fragment02.xml文件,并且在fragment02.xml中添加下面的代码

<?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"
    android:background="#0000ff">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="忧桑的蓝色"
        android:textSize="20sp"/>

</LinearLayout>

第四步:在布局文件夹中新建一个fragment03.xml文件,并且在fragment03.xml中添加下面的代码

<?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"
    android:background="#00ff00">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小志的绿色"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/fg_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>

</LinearLayout>

第五步:新建一个Fragment01.java文件,用于处理Fragment01

package com.fyt.fragment;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

public class Fragment01 extends Fragment {

    EditText fg_et;

    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        //将Fragment01的布局文件填充成一个View对象
        View v = inflater.inflate(R.layout.fragment01, null);

        //获得布局文件上的EditText控件
        fg_et = (EditText) v.findViewById(R.id.fg_et);

        //获得布局文件上的按钮
        Button button = (Button) v.findViewById(R.id.fg_bt);

        //为按钮添加一个事件监听
        button.setOnClickListener(new View.OnClickListener() {

            //发送数据按钮响应函数
            @Override
            public void onClick(View v) {

                String text = fg_et.getText().toString();
                ((MainActivity)getActivity()).setText(text);
            }
        });

        return v;
    }

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

        Log.d("MainActivity", "Fragment01的onCreate");
    }

    @Override
    public void onStart() {
        super.onStart();

        Log.d("MainActivity", "Fragment01的onStart");
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d("MainActivity", "Fragment01的onResume");
    }

    @Override
    public void onPause() {
        super.onPause();

        Log.d("MainActivity", "Fragment01的onPause");
    }

    @Override
    public void onStop() {
        super.onStop();

        Log.d("MainActivity", "Fragment01的onStop");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Log.d("MainActivity", "Fragment01的onDestroy");
    }
}

第六步:新建一个Fragment02.java文件,用于处理Fragment02

package com.fyt.fragment;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment02 extends Fragment {

    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment02, null);

        return v;
    }

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

        Log.d("MainActivity", "Fragment01的onCreate");
    }

    @Override
    public void onStart() {
        super.onStart();

        Log.d("MainActivity", "Fragment02的onStart");
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d("MainActivity", "Fragment02的onResume");
    }

    @Override
    public void onPause() {
        super.onPause();

        Log.d("MainActivity", "Fragment02的onPause");
    }

    @Override
    public void onStop() {
        super.onStop();

        Log.d("MainActivity", "Fragment02的onStop");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Log.d("MainActivity", "Fragment02的onDestroy");
    }
}

第七步:新建一个Fragment03.java文件,用于处理Fragment03

package com.fyt.fragment;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment03 extends Fragment {

    TextView fg_tv;

    //返回view对象会作为fragment01的内容显示在屏幕上
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        //使用填充器将Fragment的布局文件填充成View对象
        View v = inflater.inflate(R.layout.fragment03, null);

        //获得布局文件上的TextView控件
        fg_tv = (TextView) v.findViewById(R.id.fg_tv);

        return v;
    }

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

        Log.d("MainActivity", "Fragment03的onCreate");
    }

    @Override
    public void onStart() {
        super.onStart();

        Log.d("MainActivity", "Fragment03的onStart");
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d("MainActivity", "Fragment03的onResume");
    }

    @Override
    public void onPause() {
        super.onPause();

        Log.d("MainActivity", "Fragment03的onPause");
    }

    @Override
    public void onStop() {
        super.onStop();

        Log.d("MainActivity", "Fragment03的onStop");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Log.d("MainActivity", "Fragment03的onDestroy");
    }

    //接收从MainActivity中发送过来的数据
    public void getText(String text) {

        //将从MainActivity中发送过来的数据在Fragment03中显示
        fg_tv.setText(text);
    }
}

第八步:修改MainActivity.java中的代码

package com.fyt.fragment;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

    private Fragment03 fg3;

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

        Log.d("MainActivity", "Activity的onCreate");

        //创建Fragment03对象
        fg3 = new Fragment03();

        //获取fragment管理器
        FragmentManager fm = getFragmentManager();

        //打开事务
        FragmentTransaction ft = fm.beginTransaction();

        //把内容显示至帧布局
        ft.replace(R.id.fl, fg3);

        //提交
        ft.commit();
    }

    public void click1(View view) {

        //创建fragment0对象
        Fragment01 fg1 = new Fragment01();

        //获取fragment管理器
        FragmentManager fm = getFragmentManager();

        //打开事务
        FragmentTransaction ft = fm.beginTransaction();

        //把内容显示至帧布局
        ft.replace(R.id.fl, fg1);

        //提交
        ft.commit();
    }

    public void click2(View view) {

        //创建fragment对象
        Fragment02 fg2 = new Fragment02();

        //获取fragment管理器
        FragmentManager fm = getFragmentManager();

        //打开事务
        FragmentTransaction ft = fm.beginTransaction();

        //把内容显示至帧布局
        ft.replace(R.id.fl, fg2);

        //提交
        ft.commit();
    }

    public void click3(View view) {

        //获取fragment管理器
        FragmentManager fm = getFragmentManager();

        //打开事务
        FragmentTransaction ft = fm.beginTransaction();

        //把内容显示至帧布局
        ft.replace(R.id.fl, fg3);

        //提交
        ft.commit();
    }

    //传递数据按钮响应函数
    public void click4(View view) {

        //获取布局文件上的EditText控件
        EditText et_main = (EditText) findViewById(R.id.et_main);

        //获得EditText中的数据
        String text = et_main.getText().toString();

        //将EditText中的数据发送到Fragment
        sendData(text);
    }

    //发送数据到Fragment
    public void sendData(String text) {

        fg3.getText(text);
    }

    //接收从Fragment中发送过来的数据
    public void setText(String text) {

        EditText editText = (EditText) findViewById(R.id.et_main);
        editText.setText(text);
    }

    @Override
    protected void onStart() {
        super.onStart();

        Log.d("MainActivity", "Activity的onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.d("MainActivity", "Activity的onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.d("MainActivity", "Activity的onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();

        Log.d("MainActivity", "Activity的onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        Log.d("MainActivity", "Activity的onDestroy");
    }
}

Fragment的使用

标签:

原文地址:http://blog.csdn.net/u010105970/article/details/51333346

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!