zoukankan      html  css  js  c++  java
  • Android(Fragment和Activity之间通信)

    Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现。

    一、Activity->Fragment传递数据

    1.main.xml:
    [html] view plaincopy
     
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:id="@+id/rl_fragment"  
    5.     android:orientation="vertical"  
    6.     android:layout_height="match_parent" >  
    7.   
    8.     <EditText  
    9.         android:id="@+id/et_input"  
    10.         android:layout_width="match_parent"  
    11.         android:layout_height="wrap_content" />  
    12.   
    13.     <Button  
    14.         android:id="@+id/btn_send"  
    15.         android:layout_width="wrap_content"  
    16.         android:layout_height="wrap_content"  
    17.         android:text="发送" />  
    18.   
    19. </LinearLayout>  

    2.fragment.xml:
    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:orientation="vertical" >  
    6.     <TextView  
    7.         android:id="@+id/tv_fragment"  
    8.         android:layout_height="wrap_content"  
    9.         android:layout_width="wrap_content"  
    10.         />  
    11.   
    12. </LinearLayout>  

    3.MainActivity.java:
    [java] view plaincopy
     
    1. package com.example.fragementcommunication;  
    2.   
    3. import android.app.Activity;  
    4. import android.app.FragmentManager;  
    5. import android.app.FragmentTransaction;  
    6. import android.os.Bundle;  
    7. import android.view.View;  
    8. import android.view.View.OnClickListener;  
    9. import android.view.Window;  
    10. import android.widget.Button;  
    11. import android.widget.EditText;  
    12. import android.widget.Toast;  
    13.   
    14. public class MainActivity extends Activity {  
    15.     private EditText mMainActivityET;  
    16.     private Button mSendButton;  
    17.   
    18.     @Override  
    19.     protected void onCreate(Bundle savedInstanceState) {  
    20.         super.onCreate(savedInstanceState);  
    21.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
    22.         setContentView(R.layout.activity_main);  
    23.         mMainActivityET = (EditText) findViewById(R.id.et_input);  
    24.         mSendButton = (Button) findViewById(R.id.btn_send);  
    25.         mSendButton.setOnClickListener(new OnClickListener() {  
    26.   
    27.             @Override  
    28.             public void onClick(View v) {  
    29.                 String text = mMainActivityET.getText().toString();  
    30.                 MyFragment myFragment = new MyFragment();  
    31.                 Bundle bundle = new Bundle();  
    32.                 bundle.putString("input", text);  
    33.                 myFragment.setArguments(bundle);// 传递string  
    34.                 FragmentManager manager = getFragmentManager();  
    35.                 FragmentTransaction transaction = manager.beginTransaction();  
    36.                 transaction.add(R.id.rl_fragment, myFragment, "myfragment");  
    37.                 transaction.commit();  
    38.                 Toast.makeText(MainActivity.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();  
    39.   
    40.             }  
    41.         });  
    42.     }  
    43. }  

    4.MyFragment.java:
    [java] view plaincopy
     
    1. package com.example.fragementcommunication;  
    2.   
    3. import android.app.Fragment;  
    4. import android.os.Bundle;  
    5. import android.view.LayoutInflater;  
    6. import android.view.View;  
    7. import android.view.ViewGroup;  
    8. import android.widget.TextView;  
    9. import android.widget.Toast;  
    10.   
    11. public class MyFragment extends Fragment {  
    12.     @Override  
    13.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    14.         View view = inflater.inflate(R.layout.fragmet, null);  
    15.         TextView mFragmentTextView = (TextView) view.findViewById(R.id.tv_fragment);  
    16.         String string = getArguments().getString("input");// 获取数据;  
    17.         mFragmentTextView.setText(string);  
    18.         Toast.makeText(getActivity(), "成功获取数据" + string, Toast.LENGTH_SHORT).show();  
    19.         return view;  
    20.     }  
    21.   
    22. }  

    总结:发送数据方法->setArguments(bundle)
                接收数据方法->getArguments()
     
    下面我们看一下效果:
     
     

    二、Fragment向Activity传值(接口回调的方式)

    布局文件和上面一样,我们看一下java代码的改变:
    1.MainActivity.java:
     
    [java] view plaincopy
     
    1. package com.example.fragementcommunication;  
    2.   
    3. import com.example.fragementcommunication.MyFragment.MyListener;  
    4.   
    5. import android.app.Activity;  
    6. import android.app.FragmentManager;  
    7. import android.app.FragmentTransaction;  
    8. import android.os.Bundle;  
    9. import android.view.View;  
    10. import android.view.View.OnClickListener;  
    11. import android.view.Window;  
    12. import android.widget.Button;  
    13. import android.widget.EditText;  
    14. import android.widget.Toast;  
    15.   
    16. public class MainActivity extends Activity implements MyListener{  
    17.     private EditText mMainActivityET;  
    18.     private Button mSendButton;  
    19.   
    20.     @Override  
    21.     protected void onCreate(Bundle savedInstanceState) {  
    22.         super.onCreate(savedInstanceState);  
    23.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
    24.         setContentView(R.layout.activity_main);  
    25.         mMainActivityET = (EditText) findViewById(R.id.et_input);  
    26.         mSendButton = (Button) findViewById(R.id.btn_send);  
    27.         mSendButton.setOnClickListener(new OnClickListener() {  
    28.   
    29.             @Override  
    30.             public void onClick(View v) {  
    31.                 String text = mMainActivityET.getText().toString();  
    32.                 MyFragment myFragment = new MyFragment();  
    33.                 Bundle bundle = new Bundle();  
    34.                 bundle.putString("input", text);  
    35.                 myFragment.setArguments(bundle);// 传递string  
    36.                 FragmentManager manager = getFragmentManager();  
    37.                 FragmentTransaction transaction = manager.beginTransaction();  
    38.                 transaction.add(R.id.rl_fragment, myFragment, "myfragment");  
    39.                 transaction.commit();  
    40.                 Toast.makeText(MainActivity.this, "向Fragment发送数据" + text, Toast.LENGTH_SHORT).show();  
    41.   
    42.             }  
    43.         });  
    44.     }  
    45.   
    46.     @Override  
    47.     public void callback(String back) {  
    48.         Toast.makeText(MainActivity.this, "获取到从Fragment中传来的数据" + back, Toast.LENGTH_SHORT).show();  
    49.           
    50.     }  
    51. }  

    2.MyFragment.java:
    [java] view plaincopy
     
    1. package com.example.fragementcommunication;  
    2.   
    3. import android.app.Activity;  
    4. import android.app.Fragment;  
    5. import android.os.Bundle;  
    6. import android.view.LayoutInflater;  
    7. import android.view.View;  
    8. import android.view.ViewGroup;  
    9. import android.widget.TextView;  
    10. import android.widget.Toast;  
    11.   
    12. public class MyFragment extends Fragment {  
    13.     public MyListener listener;  
    14.     private String back="已经接收到数据!谢谢";  
    15.     /** 
    16.      * 通过接口回调的方式从Fragment向activity传值; 
    17.      * @author Administrator 
    18.      * 
    19.      */  
    20.     public interface MyListener{  
    21.         public void callback(String back);  
    22.     }  
    23.       
    24.     @Override  
    25.     public void onAttach(Activity activity) {  
    26.         super.onAttach(activity);  
    27.         listener=(MyListener) activity;  
    28.     }  
    29.     @Override  
    30.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    31.         View view = inflater.inflate(R.layout.fragmet, null);  
    32.         TextView mFragmentTextView = (TextView) view.findViewById(R.id.tv_fragment);  
    33.         String string = getArguments().getString("input");// 获取数据;  
    34.         mFragmentTextView.setText(string);  
    35.         Toast.makeText(getActivity(), "成功获取数据" + string, Toast.LENGTH_SHORT).show();  
    36.         Toast.makeText(getActivity(), "向Activity传递数据" + back, Toast.LENGTH_SHORT).show();  
    37.         listener.callback(back);  
    38.           
    39.         return view;  
    40.     }  
    41.   
    42. }  

    运行如下:
     
    这时我们可以看到先是MainActivity向Fragment传递了123,然后Fragment向Activity传递了”已经接收到数据!谢谢“。
     
     
    转自:http://blog.csdn.net/yayun0516/article/details/48210953
     
  • 相关阅读:
    mac OS 截图方法
    MAC OS上JAVA1.6 升级1.7,以及 maven3.2.1配置
    maven 安装设置方法
    STemWin移植
    uIP使用记录
    define宏定义细节及uCOS中宏定义技巧
    实验室播放视频步骤
    光通信零碎知识
    论文笔记6
    OFDMA
  • 原文地址:https://www.cnblogs.com/gao-chun/p/4837855.html
Copyright © 2011-2022 走看看