14 fragment传值

  • 两个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

posted on 2016-09-08 22:13  木鱼哥  阅读(99)  评论(0编辑  收藏  举报

导航