一、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);
}
}