Android开发之Fragment与Activity的数据交互通过回调机制实现(源代码分享)
上一篇文章简单介绍了Android的回调机制的使用,这一篇博文将重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Android api我们可以看到,fragment有着自己的生命周期并依赖于它绑定的activity的生命周期而存在,那样activity与fragment怎样进行数据交互呢,请看此篇博文。
MainActiivity的代码
package com.example.f08_fragment03; import com.example.f08_fragment03.Fragment02.Callback; import android.os.Bundle; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private FragmentManager manager;// 创建fragment管理 private FragmentTransaction transaction;// 创建fragment的事物 private EditText editText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) this.findViewById(R.id.editText2); button = (Button) this.findViewById(R.id.button1); manager = getFragmentManager(); transaction = manager.beginTransaction(); final Fragment02 fragment02 = new Fragment02(); transaction.add(R.id.left, fragment02, "left"); transaction.commit(); // 不管要实现怎样的功能都必须调用以下三个方法 // manager=getFragmentManager(); //transaction=manager.beginTransaction(); // transaction.commit();提交数据 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //通过callback机制得到fragment的数据 fragment02.getString(new Callback() { @Override public void getString(String msg) { // TODO Auto-generated method stub editText.setText(msg); } }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }Fragment02的代码
package com.example.f08_fragment03; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; public class Fragment02 extends Fragment { private Button button; private EditText editText; @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } // 在该方法中更新UI @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.left, null); button = (Button) view.findViewById(R.id.button1); editText = (EditText) view.findViewById(R.id.editText1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //通过getActivity方法得到activity的控件,以此可以得到数据 EditText eText = (EditText) getActivity().findViewById( R.id.editText2); Log.i("info", "------->" + eText.getText().toString()); editText.setText(eText.getText().toString()); } }); return view; } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); } //实现数据传递 public void getString(Callback callback) { String msg = editText.getText().toString(); callback.getString(msg); } //创建接口 public interface Callback { public void getString(String msg); } }
main的xml
<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" > <LinearLayout android:id="@+id/left" android:layout_width="200dp" android:layout_height="match_parent" android:background="#cbcbcb" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/right" android:layout_width="200dp" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="14dp" android:layout_toRightOf="@+id/left" android:ems="10" android:inputType="textPassword" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText2" android:layout_toRightOf="@+id/left" android:text="得到Fragment的数据" /> </RelativeLayout>
fragment的xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="得到Activity的数据" /> </LinearLayout>
这样就大功告成了,点击fragment的button就可以在其editText控件显示activity的editText控件的文字,点击activity的button就可以得到fragment的编辑控件的数据!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。