我想在Activity中读取Fragment中EditText中的字符串,找了一些资料都是使用接口回调的方法,下面程序附录中的第二种方法,我理解了一下发现第一种方法也可以实现,那么问什么非要使用接口回调的方法开实现数据共享而没有使用提供一个get方法来获取数据?是不是接口回调还有其他好处?
Fragemnt的源码:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
public class Fragment1 extends Fragment {
private EditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment1_layout, null);
editText = (EditText) view.findViewById(R.id.editText1);
return view;
}
//第一种方法
public String getData(){
return editText.getText().toString();
}
// 第二种方法接口回调
public void getEditText(CallBack callBack) {
callBack.getData(editText.getText().toString());
}
public interface CallBack {
public void getData(String str);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
Activity代码 :
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import com.example.class_fragment_activity_communicating_data.Fragment1.CallBack;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
final Fragment1 fragment1 = new Fragment1();
transaction.add(R.id.right, fragment1, "fragment1");
transaction.commit();
findViewById(R.id.A_button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fragment1.getEditText(new CallBack() {//通过接口回调获取Fragment中的值
@Override
public void getData(String str) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, str, 1).show();
}
});
// Toast.makeText(MainActivity.this, fragment1.getData(), 1).show();
//Fragment的实例调用Fragment的函数也能实现数据通信,为嘛要使用接口? 使用接口的好处?
}
});
}
}