我有一个包含2个片段的viewpager,每个片段都包含一个edittext。当用户单击活动中的按钮时,我需要将片段中的edittext值设置为活动。我提到了这个文档Communicating with Other Fragments,就像当用户点击片段中的列表项时我将获得活动中的值。但在我的情况下,按钮处于活动状态。任何人都可以建议正确的方式这样做
答案 0 :(得分:5)
你可以像Christopher Francisco建议的那样(使用TextWatchers)或者你可以为EditTexts分配ID并像这样检索它们的数据(在Activity里面的按钮onClickListener中):
String editText1Data = ((EditText) findViewById(R.id.editText1)).getText().toString();
String editText2Data = ((EditText) findViewById(R.id.editText2)).getText().toString();
....
答案 1 :(得分:2)
而不是Activity
向Fragment
询问数据,而是将数据从Fragment
传递到Activity
(无需询问)。
我的意思是,向TextWatcher
添加EditText
界面,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);
}