activity与fragment之间传递数据

您所在的位置:网站首页 activity与fragment传递数据 activity与fragment之间传递数据

activity与fragment之间传递数据

2024-07-15 13:46| 来源: 网络整理| 查看: 265

总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数。

1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法

((XXXXActivity)getActivity()).fun();

2.Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过getArguments();获得从activity中传递过来的值

 

实例界面:(此Demo演示了activity给fragment传递数据和fragment给activity传递数据)

代码如下:

activity_main.xml

----------------------------------------------------------------------------------------------------------------

f01.xml

------------------------------------------------------------------------------------------------------

MainActivity.java

package com.example.fragment;

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.EditText;

public class MainActivity extends FragmentActivity {

private Fragment01 f01; private FragmentManager fm; private EditText et_data;

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

et_data = (EditText) findViewById(R.id.et_data);

f01 = new Fragment01();

// 得到fragment的管理器,可以得到fragment的事务管理器 fm = this.getSupportFragmentManager();

open01(null); }

public void open01(View view) {

// Fragment01 f01= new Fragment01();

// 得到fragment的事务管理器,可以填充fragment的界面 // 事务可以保证加载的多个fragment要么同时显示成功要么同时显示失败 FragmentTransaction ft = fm.beginTransaction(); // 把f01显示在framelayout界面中 ft.replace(R.id.fl_container, f01); // 提交事务 ft.commit(); }

// Activity传递数据给fragment public void submit(View v) { // 传递数据给fragment01界面 String data = et_data.getText().toString().trim(); // 把data传给fragment01 // 把fragment01作为一个普通的对象,调用它的方法传递参数 // Fragment01 f01 = new Fragment01(); // activity中设置数据,对应fragment有获取数据的方法。 f01.setData(data); }

// 获取fragment传递过来的数据。 public void setInfo(String info) { et_data.setText(info);

}

}

-----------------------------------------------------------------------------------------------

fragment01.xml

package com.example.fragment;

import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;

public class Fragment01 extends Fragment {

private View view;

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 加载布局文件 // getActivity() fragment所运行在的activity // resource fragment的布局文件资源ID // root 父级控件,通常使用null

view = View.inflate(getActivity(), R.layout.f01, null);

// 从view中找到按钮 Button btn_info = (Button) view.findViewById(R.id.btn_info); btn_info.setOnClickListener(new OnClickListener() {

@Override public void onClick(View v) {

EditText et_info = (EditText) view.findViewById(R.id.et_info); String info = et_info.getText().toString().trim(); // 把MainActivity作为一个普通的对象,调用它的方法传递参数 FragmentActivity activity = getActivity(); // 判断activity是否是MainActivity类型的 if (activity instanceof MainActivity) { MainActivity mainActivity = (MainActivity) activity; // 调用activity的方法传递参数 mainActivity.setInfo(info); }

} }); return view; }

// fragment传递数据给activity public void setData(String data) { TextView tv_data = (TextView) view.findViewById(R.id.tv_data); tv_data.setText(data);

}

}

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3