android Fragment系列学习笔记之六


一、Fragment与Fragment之间的数据交互
       (1)提出问题:Fragment与Fragment之间在什么样的场景下需要进行数据交互呢?
       (2)图片说明:
       

               场景说明:假设左侧的Fragment有个输入框,有一个按钮,右侧的Fragment有一个输入框,有一个按钮。希望在点击右侧Fragment中的按钮的时候,获取到第一个Fragment当中EditText中的值。

     (3)实现思路

      首先需要考虑的是如何获取右边Fragment的引用?

      我们可以考虑使用FragmentManager。因为所有的Fragment在Activity当中都是由同一个FragmentManager来进行管理,在左侧的Fragment获取到FragmentManager对象的引用之后,接下来即可通过FragmentManager对象找到它所管理的所有的Fragment对象,因此也就可以操作其中任意的一个Fragment对象。
    
     (4)实例代码:    

     

       

package com.example.fragment;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.android_fragment_trans.R;
 
/**
 * 文件名: com.example.fragment.LeftFragment
 * 作者:  熊杰
 * 日期: 13-12-13
 * 时间: 06:11
 * 开发工具: IntelliJ IDEA 12.0.4
 * 开发语言: Java,Android
 * 开发框架:
 * 版本: v0.1
 * <strong>每当写一个Fragment的时候,需要有意识的写上这三个方法</strong>
 * <p></p>
 */
 
public class LeftFragment extends Fragment{
    private Button btLeft;
    private FragmentManager fragmentManager;
    private  RightFragment rightFragment;
    private EditText etRight;
    /**
     * 这个方法实例化变量
     * @param savedInstanceState
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragmentManager = getFragmentManager();
    }
 
    /**
     * 这个方法用于加载View
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     * 点击左边Fragment的Button要获取右边Fragment文本输入框中的值
     * 首先需要考虑的是如何获取右边Fragment的引用。
     * 有一个思路,所有的Fragment在Activity当中都是由同一个FragmentManager来进行管理。
     * 那么在左边的Fragment中是否可以得到FragmentManager对象呢?
     *
     * 另外补充说明,如果Fragment再嵌套Fragment,一个Fragment里面还有几个孩子,那么这几个孩子是平等的。那么
     * getChildFragmentManager()获取到的就是当前的这个Fragment,不再是Activity
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment,null);
        btLeft = (Button) view.findViewById(R.id.bt_left);
        btLeft.setOnClickListener(onClickListener);
        return view;
    }
 
    /**
     * 表示移开Fragment的时候,将数据提交
     */
    @Override
    public void onPause() {
        super.onPause();
    }
 
 
    /**
     * 点击左侧Fragment按钮时,可以通过FragemntManager()管理类,让它去findFragmentByTag(),去找到任意的Fragment。
     * 如果可以通过findFragmentByTag()方法找到Fragment,则可保证该Fragment与同一级的所有Fragment进行交互。
     */
    private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           rightFragment = (RightFragment) fragmentManager.findFragmentByTag("right");
            etRight = (EditText) rightFragment.getView().findViewById(R.id.et_right);
            String etRightValue = etRight.getText().toString();
            Toast.makeText(getActivity(),"right====>>" + etRightValue,Toast.LENGTH_LONG).show();
        }
 
    };
}


package com.example.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.android_fragment_trans.R;
/**
 * 文件名: com.example.fragment.RightFragment
 * 作者:  熊杰
 * 日期: 13-12-13
 * 时间: 06:13
 * 开发工具: IntelliJ IDEA 12.0.4
 * 开发语言: Java,Android
 * 开发框架:
 * 版本: v0.1
 * 说明
 * 

*/ public class RightFragment extends Fragment { private Button btRight; private FragmentManager fragmentManager; private LeftFragment leftFragment; private EditText etLeft; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fragmentManager = getFragmentManager(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.right_fragment,null); btRight = (Button) view.findViewById(R.id.bt_right); btRight.setOnClickListener(onClickListener); return view; } @Override public void onPause() { super.onPause(); } private View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { leftFragment = (LeftFragment) fragmentManager.findFragmentByTag("left"); etLeft = (EditText) leftFragment.getView().findViewById(R.id.et_left); String etRightValue = etLeft.getText().toString(); Toast.makeText(getActivity(), "left====>>" + etRightValue, Toast.LENGTH_LONG).show(); } }; }

package com.example.android_fragment_trans;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import com.example.fragment.LeftFragment;
import com.example.fragment.RightFragment;
public class MyActivity extends FragmentActivity {
    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;
    /**
     * 在Activity初始化的时候,将Fragment添加到Activity当中
     * @param savedInstanceState
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        LeftFragment leftFragment = new LeftFragment();
        RightFragment rightFragment = new RightFragment();
        /**
         *         fragmentTransaction.add()
         *         fragmentTransaction.replace()
         *         这两个方法有什么区别呢?
         *         add()方法是将Fragment加到Activity当中。
         *         replace()方法表示将之前的Fragment从Activity当中移除掉
         */
        fragmentTransaction.add(R.id.left,leftFragment,"left");
        fragmentTransaction.add(R.id.right,rightFragment,"right");
        fragmentTransaction.commit();
    }
}

 

二、话题引深

       Fragment再嵌套Fragment,如何在Fragment中与嵌套Fragment进行数据交互呢?


      

         也就是说左侧的Fragment要与右侧Fragment中的Fragment进行数据交互如何实现?

    实现思路:

 

        首先需要通过 FragmentManager管理类找到右侧的 Fragment,然后通过右侧的 FramentChildFragmentManager()管理类再找到里面的 Fragment

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值