Fragment的接口回调
重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Android api我们可以看到,fragment有着自己的生命周期并依赖于它绑定的activity的生命周期而存在,那样activity与fragment怎样进行数据交互呢?
MainActiivity的代码:
package com.example.fragment;
import com.example.fragment.Fragment.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.fragment;
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) {
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

浙公网安备 33010602011771号