Android Fragment系列学习笔记之四

一、Fragment向Activity中传值

      (1)案例:


      点击Activity中的一个Button,获取Fragment中一个EditText控件的值。如下图所示:

 

(2)实现思路

     最主要是通过getActivity()获取Fragment外层的父窗体实例对象,然后通过findViewById()的方法获取Activity中的控件,最后获取控件的值。

(3)编码实现


package com.example.fragment_activity;
 
import android.os.Bundle;
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 android.widget.Toast;
import com.example.fragment.LeftFragment;
 
public class MainActivity extends FragmentActivity {
 
    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;
    private Button btGetFragmentEtValue;
    private LeftFragment leftFragment;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        leftFragment = new LeftFragment();
        fragmentTransaction.add(R.id.left,leftFragment,"leftFragment");
        fragmentTransaction.commit();
 
        btGetFragmentEtValue = (Button) findViewById(R.id.bt_get_fragment_et_value);
        btGetFragmentEtValue.setOnClickListener(onClickListener);
    }
 
    private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            leftFragment.getEditText(new LeftFragment.CallBack() {
                @Override
                public void getResult(String result) {
                    Toast.makeText(getApplicationContext(),result,Toast.LENGTH_LONG).show();
                }
            });
        }
    };
}


关键代码: etActivityValue = (EditText) getActivity().findViewById(R.id.et_activity_value);

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.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.fragment_activity.R;
 
/**
 * 文件名: com.example.fragment.LeftFragment
 * 作者:  熊杰
 * 日期: 13-12-7
 * 时间: 16:01
 * 开发工具: IntelliJ IDEA 12.0.4
 * 开发语言: Java,Android
 * 开发框架:
 * 版本: v0.1
 * <strong>说明</strong>
 * <p></p>
 */
 
public class LeftFragment extends Fragment{
 
    private Button btGetActivityValue;
    private EditText etActivityValue;
    private EditText etFrgmentValue;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left,null);
        btGetActivityValue = (Button) view.findViewById(R.id.bt_get_activity_value);
        etActivityValue = (EditText) getActivity().findViewById(R.id.et_activity_value);
        etFrgmentValue = (EditText) view.findViewById(R.id.et_frgment_value);
        btGetActivityValue.setOnClickListener(onClickListener);
        return view;
    }
 
    @Override
    public void onPause() {
        super.onPause();
    }
 
    private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          switch (view.getId()){
              case R.id.bt_get_activity_value:
                  Toast.makeText(getActivity(),"LeftFragment中获取到Activity中的值为:" + etActivityValue.getText().toString(),Toast.LENGTH_LONG).show();
                  break;
          }
        }
    };
 
    /**
     * 接口回调
     * 定义完接口之后,定义一个方法,这个方法没有返回值,
     * 此方法需要传递一个CallBack进来,
     * 调用这个方法的时候,Fragment中EditText实例化的位置就移到下面的这个方法中。
     */
    public void getEditText(CallBack callBack){
        String etFragmentValue = etFrgmentValue.getText().toString();
        //将Fragment中获取到的值放到回调函数的参数中去
        callBack.getResult(etFragmentValue);
    }
 
    /**
     * 声明一个接口为CallBack
     * 这一个接口有一个方法,叫做getResult(),我们需要给他传递一个值回来。
     * 但是我们得在Fragment里面声明一个EditText
     */
    public interface CallBack{
        public void getResult(String result);
    }
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值