Fragment进阶1——Fragment与Activity之间的通信与切换

简介: 本节再说一个Activity和Fragment之间通信的例子,系统有以下功能:在主activity下方有三个按钮,分别是send、record、common msg。
本节再说一个Activity和Fragment之间通信的例子,系统有以下功能:在主activity下方有三个按钮,分别是send、recordcommon msg。当单击按钮时,来切换上方的fragment,用以显示不同的内容。

当单击send按钮时,MainActivity中把EditText中的值传到Fragment中,然后把Fragment动态的显示在MainActivity中。 

所用的知识点:

1.MainActivity中把EditText中的值传到fragment中。

2.Fragment动态的显示在MainActivity中。

FragmentSend.java文件很简单,看一下布局文件

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

    <TextView
        android:id="@+id/edit_fragment_send_msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >
    </TextView>

</RelativeLayout>

在MainActivity中写点击事件

private OnClickListener sendListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            // TODO Auto-generated method stub

            // 获取fragment中的text控件,可以在MainActivity中直接获取fragment中的控件
            TextView showView = (TextView) findViewById(R.id.edit_fragment_send_msg);

            // 得到EditText中的内容
            String message = mEditText.getText().toString();

            mStringBuffer = mStringBuffer.append(message).append("\n");

            String text = "";

            // 防止字符过长
            if (mStringBuffer.length() > 100) {
                text = mStringBuffer.substring(mStringBuffer.length() - 100,
                        mStringBuffer.length() - 1).toString();
            } else {
                text = mStringBuffer.toString();
            }
            showView.setText(text);

            // 将获取的值放置到intent中,方便以后再fragment中获取
            getIntent().putExtra("str", mStringBuffer.toString());

        }
    };

当单击record按钮时,获取到前面所有发送的内容。所用到的知识点:

1.如何获取MainActivity中的数据(刚才发送的数据放在MainActivity中的字符缓存中)

2.从一个fragment切换到另一个fragment中。

继续在MainActivity中写一个点击事件

private OnClickListener recordListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            // TODO Auto-generated method stub

            FragmentRecord fragmentRecord = new FragmentRecord();
            FragmentTransaction fragmentTransaction = mFragmentManager
                    .beginTransaction();

            fragmentTransaction.replace(R.id.framelayout_fragment_main,
                    fragmentRecord);

            fragmentTransaction.addToBackStack(null);

            fragmentTransaction.commit();

        }

    };

当单击common msg按钮时会弹出一个列表,用户点击列表选项会将字符值返回到主EditText上。

所用到的知识点:

1.利用ListView控件显示数据

2.从一个fragment切换到另一个fragment

3.fragment把值传递到MainActivity中


同样在MainActivity中写一个点击事件

private OnClickListener commonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            // TODO Auto-generated method stub

            FragmentCommon fragmentCommon = new FragmentCommon();
            FragmentTransaction fragmentTransaction = mFragmentManager
                    .beginTransaction();

            fragmentTransaction.replace(R.id.framelayout_fragment_main,
                    fragmentCommon);

            fragmentTransaction.addToBackStack(null);

            fragmentTransaction.commit();

        }

    };

现在补齐MainActivity类文件

public class MainActivity extends Activity {

    private EditText mEditText;
    private FragmentManager mFragmentManager;
    private FragmentTransaction mFragmentTransaction;
    private Button mButtonSend;
    private Button mButtonRecord;
    private Button mButtonCommon;
    private StringBuffer mStringBuffer;
    String TAG = "tag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        // WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        mStringBuffer = new StringBuffer();
        mButtonSend = (Button) findViewById(R.id.btn_main_send);
        mButtonRecord = (Button) findViewById(R.id.btn_main_record);
        mButtonCommon = (Button) findViewById(R.id.btn_main_common);
        mEditText = (EditText) findViewById(R.id.edit_main_msg);
        mButtonSend.setOnClickListener(sendListener);
        mButtonRecord.setOnClickListener(recordListener);
        mButtonCommon.setOnClickListener(commonListener);
        mFragmentManager = getFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();

        //必须先初始化一个fragment,防止获取不到对应fragment中控件

        if (savedInstanceState == null) {
            FragmentSend fragmentSend = new FragmentSend();
            mFragmentTransaction.add(R.id.framelayout_fragment_main,
                    fragmentSend, "SEND");
            // 加入到后台栈中
            mFragmentTransaction.addToBackStack(null);
            mFragmentTransaction.commit();
        }

    }


相关文章
|
Android开发
Android 中Fragment和Activity之间的通信
Android 中Fragment和Activity之间的通信
75 0
|
Android开发
Activity、Window、View三者关系
目录介绍 01.Window,View,子Window 02.什么是Activity 03.什么是Window 04.什么是DecorView 05.什么是View 06.关系结构图 07.Window创建过程 08.
1027 0
|
容器
Fragment与Fragment相互切换之间的生命周期方法
最近一段时间忙于找工作,找到工作之后忙于项目上线,好久没有写过博客,现在感觉终于闲暇了,写一写这次项目中需要总结提炼的知识点,给自己留个印象吧,毕竟好记性不如烂笔头。
1593 0
|
XML Android开发 数据格式
Fragment与Activity之间的通信
前言 君子博学而日参省乎已,则知明而行无过矣。 要显示Fragment,必须将Fragment添加到Activity中。添加到Activity中有如下两种方式。
1205 0
Activity和Fragment之间解耦
看鸿洋博客:http://blog.csdn.net/lmj623565791/article/details/42628537,整理下一些关键点 public class ContentFragment extends Fragment { private String mArgume...
802 0

热门文章

最新文章