在“活动”按钮单击事件上获取片段edittext值

时间:2014-06-23 16:38:35

标签: android android-activity android-viewpager fragment

我有一个包含2个片段的viewpager,每个片段都包含一个edittext。当用户单击活动中的按钮时,我需要将片段中的edittext值设置为活动。我提到了这个文档Communicating with Other Fragments,就像当用户点击片段中的列表项时我将获得活动中的值。但在我的情况下,按钮处于活动状态。任何人都可以建议正确的方式这样做

2 个答案:

答案 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)

而不是ActivityFragment询问数据,而是将数据从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);
}