2018-04-22

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

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


    2018-04-22_第1张图片
    图1-10.jpg

    代码如下所示:

    
    
    
    
    
    
     
    
     

fragment代码如下所示:

 
 



 

界面完成之后实现其功能
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.运行结果如图所示:
点击按钮,把信息传递过去


2018-04-22_第2张图片
图1-11.jpg
2018-04-22_第3张图片
图1-12.jpg

小结:

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

你可能感兴趣的:(2018-04-22)