14 fragment传值

来源:互联网 发布:ipv6 无网络访问权限 编辑:程序博客网 时间:2024/06/06 14:25
  • 两个fragment传值

    方式一

    • 布局文件代码:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    tools:context=".MainActivity" >    <!-- 静态  必须要写ID-->    <fragment        android:id="@+id/fragment1"        android:name="com.qf.day14_fragment_4.fragment.MyFragment1"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1" />    <View        android:layout_width="1dp"        android:layout_height="match_parent"        android:background="#0f0" />    <!-- 动态 -->    <LinearLayout        android:id="@+id/ll_fragment_id"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1"        android:orientation="horizontal" /></LinearLayout>
    • 布局文件逻辑代码:

      package com.qf.day14_fragment_4;import com.qf.day14_fragment_4.fragment.MyFragment2;import android.os.Bundle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.view.Menu;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //管理者对象        FragmentManager manager = getFragmentManager();        FragmentTransaction transaction =   manager.beginTransaction();        MyFragment2 myFragment2 = new MyFragment2();        transaction.replace(R.id.ll_fragment_id,myFragment2);        transaction.commit();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}
    • 其中一个fragment逻辑代码:

      package com.qf.day14_fragment_4.fragment;import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import com.qf.day14_fragment_4.R;public class MyFragment1 extends Fragment{    private Button btn;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        // TODO Auto-generated method stub        View v = inflater.inflate(R.layout.fragment1_layout, container, false);        btn = (Button) v.findViewById(R.id.btn);        //点击按钮传值        btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                //管理者对象                FragmentManager manager = getFragmentManager();                FragmentTransaction transaction =   manager.beginTransaction();                MyFragment2 myFragment2 = new MyFragment2();                Bundle bundle = new Bundle();                bundle.putString("msg", "左边Fragment向右边Fragment传值");                myFragment2.setArguments(bundle);                transaction.replace(R.id.ll_fragment_id, myFragment2);                transaction.commit();            }        });        return v;    }}

    方式二 前提:必须两个静态fragment

    • 界面xml代码:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    tools:context=".MainActivity" >    <fragment        android:id="@+id/leftfragment"        android:name="com.qf.day14_fragment_demo5.fragment.Fragment1"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1" />    <View        android:layout_width="1dp"        android:layout_height="match_parent"        android:background="#00f" />    <fragment        android:id="@+id/rightfragment"        android:name="com.qf.day14_fragment_demo5.fragment.Fragment2"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1" /></LinearLayout>
    • 其中核心fragment代码

      package com.qf.day14_fragment_demo5.fragment;import android.app.Fragment;import android.os.Bundle;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;import com.qf.day14_fragment_demo5.R;public class Fragment1 extends Fragment{    private EditText etContent;    private Button btnSend;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        // TODO Auto-generated method stub        View view = inflater.inflate(R.layout.layout01, container, false);        etContent = (EditText) view.findViewById(R.id.et_content);        btnSend = (Button) view.findViewById(R.id.btn_send);        btnSend.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                String msg = etContent.getText().toString().trim();                //通过Fragment的id  获取Fragment2的对象//              Fragment2 fragment2 = (Fragment2) getFragmentManager().findFragmentById(R.id.rightfragment);//              fragment2.setTextValues(msg);                //TextView tv = (TextView) getFragmentManager().findFragmentById(R.id.rightfragment).getView().findViewById(R.id.tv_show);                TextView tv = (TextView) getActivity().findViewById(R.id.tv_show);                tv.setText(msg);            }        });        return view;    }}
  • fragment给界面传值(Activity) 接口回调

    • 界面代码

      package com.qf.day14_fragment_demo3;import com.qf.day14_fragment_demo3.callback1.CallBackValue;import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity implements CallBackValue{    private TextView tv;    @SuppressLint("NewApi")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView) findViewById(R.id.tv);        FragmentManager  manager = getFragmentManager();        FragmentTransaction transaction = manager.beginTransaction();        transaction.replace(R.id.ll_fragment_id, new MyFragment());        transaction.commit();    }    //回调接口的方法    @Override    public void sendMessage(String msg) {        // TODO Auto-generated method stub        tv.setText(msg);    }}
    • 接口代码

      package com.qf.day14_fragment_demo3.callback1;public interface CallBackValue {    public void sendMessage(String msg);}
    • fragment代码

      package com.qf.day14_fragment_demo3;import com.qf.day14_fragment_demo3.callback1.CallBackValue;import android.annotation.SuppressLint;import android.app.Activity;import android.app.Fragment;import android.os.Bundle;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;@SuppressLint("NewApi")public class MyFragment extends Fragment{    CallBackValue callBackValue;    private EditText et;    private Button btnFTA;    /**     * 与Activity第一次链接是调用     */    @Override    public void onAttach(Activity activity) {        // TODO Auto-generated method stub        super.onAttach(activity);        //Fragment归属的Activity是getActivity        callBackValue = (CallBackValue) getActivity();    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        // TODO Auto-generated method stub        View v = inflater.inflate(R.layout.fragment_layout, container,false);        et = (EditText) v.findViewById(R.id.et);        btnFTA = (Button) v.findViewById(R.id.btn_FTA);        btnFTA.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                //将值传给Activity                String msg = et.getText().toString().trim();                callBackValue.sendMessage(msg);            }        });        return v;    }}
  • fragment 获取 界面数据(Activity)

    • 可以fragment中直接getActivity 或者getContext 获取其对象
    • 或者动态创建时用setAgunment 在fragment中getAgument
0 0
原创粉丝点击