Android 如何从VIewpager中的其他片段获取信息

Android 如何从VIewpager中的其他片段获取信息,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我正在Android开发者网站上学习本教程 我的情况是 我有N个片段,代表我的viewpager中的每个页面,每个片段都是不同的,并且有自己的布局。这就是为什么我对每种类型的片段都有不同的类 我想在前几页中获得不同edittext的值,但在最后一页中,我想处理这些信息 我不知道如何解决这个问题,您可以使用Intent或Bundle将信息从一个片段传递到其他片段。处理第二个片段中的信息,并再次使用Intent或Bundle将处理结果传递给第一个片段。 例子: 如@calvinfly所述,尝试实现

我正在Android开发者网站上学习本教程

我的情况是

我有N个片段,代表我的viewpager中的每个页面,每个片段都是不同的,并且有自己的布局。这就是为什么我对每种类型的片段都有不同的类

我想在前几页中获得不同edittext的值,但在最后一页中,我想处理这些信息


我不知道如何解决这个问题,您可以使用Intent或Bundle将信息从一个片段传递到其他片段。处理第二个片段中的信息,并再次使用Intent或Bundle将处理结果传递给第一个片段。 例子:

如@calvinfly所述,尝试实现一个接口。因为每个片段都是唯一的,并且彼此不了解,所以它们之间的唯一链接是创建它们的适配器。因此,您可以在片段及其适配器之间设置回调:

public class DummyFragment extends Fragment {
    private OnEditTextSendListener mListener;
    ...
    public interface OnSendTextListener { // this requires the adapter to implement sendMessage()
        public void sendMessage(CharSequence msg);
    }

    public void setOnSendTextListener(OnSendTextListener listener) {
        mListener = listener;
    }

    public View onCreateView( ... ) {
        ...
        (EditText) editText = (EditText) rootView.findViewById(R.id.editText);
        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                mListener.sendMessage(v.getText());
            }
        }
    }
}
注意:如果需要,指定侦听特定的actionId,例如EditorInfo.IME\u ACTION\u SEND

然后在寻呼机适配器中:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter 
    implements DummyFragment.OnSendTextListener {
    private String mReceivedMessage;

    // the required method to implement from the interface
    public void sendMessage(CharSequence msg) {
        mReceivedMessage = msg.toString();
        notifyOnDataSetChanged(); // tell the adapter views need to be updated
    }
}
从这里开始,当适配器调用setOnSendTextListener并将其设置为自身(如下所示)时,当您对EditText执行操作时,适配器将接收EditText输入。剩下的唯一一件事就是将此消息传递回相应的片段,可能是在getItem期间,作为捆绑包中的参数之一

public Fragment getItem(int position) {
    Fragment fragment;
    Bundle args = new Bundle();
    switch (position) {
        case 0:
            fragment = new DummyFragment();
            ((DummyFragment) fragment).setOnSendTextListener(this);
            break;
        case 1:
            // your other fragment
        case 2:
            // your other fragment that wants the message from 1st fragment
            args.putString(DummyOtherFragment.ARG_DUMMYFRAGMENT_MSG, mReceivedMessage);
            break;
        default:
    }

    // other arguments here
    fragment.setArguments(args);
    return fragment;
}
希望这有帮助-更多信息,请参阅Android开发者指南


旁注:您可能会遇到这样的问题:适配器正确地接收回调信息,但它传递数据的片段不会重新加载数据,即使您正在调用notifyOnDataSetChanged。这是一个完全不同的问题,我想让您进一步阅读。

在您发布的教程中,我认为很明显,您必须实现getItem override方法。 在该网页中查找文本:

创建扩展FragmentStatePagerAdapter抽象的类 类并实现getItem

扩展片段或分页器的想法很常见。我为PagerAdapter做了这件事,我很高兴。

尝试使用类似的界面