我有一个包含2个片段的视图页面(ViewPager),每个片段都包含一个编辑框(edittext)。当用户在活动(activity)中点击按钮时,我需要获取片段中编辑框的值并传递到活动中。我参考了这篇文档 与其他片段通信,它类似于当用户在片段中点击列表项时,我将在活动中获取值。但在我的情况下,按钮在活动中。有人能建议正确的做法吗?
你可以像Christopher Francisco建议的那样(使用TextWatchers),或者你可以给EditText分配ID,并像这样检索它们的数据(在Activity中的Buttons onClickListener内):
String editText1Data = ((EditText) findViewById(R.id.editText1)).getText().toString();
String editText2Data = ((EditText) findViewById(R.id.editText2)).getText().toString();
....
不要让Activity
向Fragment
请求数据,而是从Fragment
传递数据到Activity
(无需请求)。
我的意思是,在EditText
中添加TextWatcher
接口,并使用afterTextChanged()
接口(请再次阅读http://developer.android.com/training/basics/fragments/communicating.html)将其传递给Activity
。 当用户按下按钮时,您不必从片段中检索值,因为您已经拥有它们,您只需要应用逻辑即可。
例如:
// Inside Activity, it should implement FragmentInterface1, FragmentInterface2
private String str1;
private String str2
@Override
public void onFragment1EditTextChanged(String string) {
str1 = string;
}
@Override
public void onFragment2EditTextChanged(String string) {
str2 = string;
}
// This is for each Fragment1 and Fragment2, just change the number acordingly
private FragmentInterface1 listener = null;
@Override
public View onCreateView(/*params*/) {
// inflate the view
edittext = (EditText) view.findViewById(R.id.myEditText);
edittext.addTextWatcher(new TextWatcher() {
// Any callback works, but i'd go for this one
public void afterTextChanged(/*params*/) {
if(listener != null) listener.onFragment1EditTextChanged(edittext.getText().toString());
}
});
}
@Override
public void onAttach(Activity activity) {
listener = (FragmentInterface1) activity;
}
public interface FragmentInterface1 {
public void onFragment1EditTextChanged(String string);
}
onFragment1EditTextChange()
方法中放置尽可能多的参数(显然,使用不同的名称哈哈哈),以便输入视图在我的片段中。 - Christopher Francisco