美文网首页
2018-04-22

2018-04-22

作者: 5050_ | 来源:发表于2018-04-22 20:28 被阅读0次

通过广播实现Fragment与Activity之间的数据交互

  1. 首先明确要实现的功能及可视化界面


    图1-10.jpg

    代码如下所示:

    <RelativeLayout 
    
    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"
    tools:context=".MainActivity" >
    
    <fragment
     android:id="@+id/fragment"
     android:name="com.example.androidstudy1004.fragment"
     android:layout_width="120dp"
     android:layout_height="match_parent" />
    
    
    
     <EditText
     android:id="@+id/editText1"
     android:layout_width="120dp"
     android:layout_height="wrap_content"
     android:layout_alignParentTop="true"
     android:layout_marginLeft="24dp"
     android:layout_marginTop="138dp"
     android:layout_toRightOf="@+id/fragment"
     android:ems="10" />
    
     <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@+id/editText1"
      android:layout_below="@+id/editText1"
      android:layout_centerVertical="true"
      android:layout_marginLeft="17dp"
      android:layout_marginTop="48dp"
      android:text="发送" />
    
     </RelativeLayout>
    

fragment代码如下所示:

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="23dp"
    android:layout_marginTop="142dp"
    android:text="TextView" />

 </RelativeLayout>

界面完成之后实现其功能
2.首先获取主界面edittext中的内容点击发送按钮发送到fragment的textview中
(1)在MainActivity获取文本框然后获取文本框的值,,然后通过广播发送广播。主要代码实现如下(MainActivity):

 public class MainActivity extends Activity {
 EditText et;
 Button bt;
 TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et=(EditText) findViewById(R.id.editText1);
    bt=(Button) findViewById(R.id.button1);
    tv=(TextView) findViewById(R.id.textView1);
    
    bt.setOnClickListener(new OnClickListener() {
        
        @Override
        public void onClick(View arg0) {
          String s=et.getText().toString().trim();  //获得文本框的内容
          //发送广播
          Intent intent=new Intent();
          intent.setAction("aa.bb.cc");//告诉他从哪
          intent.putExtra("name", s);//告诉这个意图要带上什么东西
          sendBroadcast(intent); //发送这个广播
          
        }
    });
   }
 }

(2)F1中:
在fragment中接收广播给Textview赋值。在onCreate()方法中接收广播,接收完广播之后在onDestroy()中销毁广播。

 public class F1 extends Fragment {
MyBroadcastReceive receiver;
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment, null);
    tv=(TextView) view.findViewById(R.id.textView1);
    return view;
}
 @Override
public void onDestroy() {
    super.onDestroy();
    getActivity().unregisterReceiver(receiver);
}
//先在oncreate里创建一个收音机
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     receiver=new MyBroadcastReceive();
    //意图过滤器
    IntentFilter itFilter=new IntentFilter();
    itFilter.addAction("aa.bb.cc");
    //动态注册广播接收者
    getActivity().registerReceiver(receiver, itFilter);
}

//然后让收音机做好接收广播的准备         广播接收者
class MyBroadcastReceive extends BroadcastReceiver{
    //当收音机收到消息的时候
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        String s=arg1.getStringExtra("name");
        tv.setText(s);  //获得文本框里的内容
    }
    
   }
 }

3.运行结果如图所示:
点击按钮,把信息传递过去


图1-11.jpg 图1-12.jpg

小结:

 MyBroadcastReceive  收音机
 BroadcastReceiver  广播接收者
 IntentFilter  意图过滤器
 //动态注册广播接收者
 getActivity().registerReceiver(receiver, itFilter);

相关文章

网友评论

      本文标题:2018-04-22

      本文链接:https://www.haomeiwen.com/subject/iioclftx.html