我正在从Android开发者网站上关注本教程 http://developer.android.com/training/animation/screen-slide.html
我的情况是这样......
我有N个片段代表我的viewpager中的每个页面,每个片段都不同并且有自己的布局。这就是为什么我为每种类型的片段都有不同的类。
我想获得我在第一页中使用的不同编辑文本的值,但在最后一页我要处理该信息。
我不知道如何解决这个问题
答案 0 :(得分:0)
您可以使用Intent或Bundle将信息从一个片段传递到其他片段。在2nd Fragment中处理该信息并再次使用Intent或Bundle将处理结果传递给第一个片段 例: Simple example for Intent and Bundle
答案 1 :(得分:0)
如@calvinfly所述,尝试实现一个接口。因为每个单独的片段都是唯一的并且彼此不了解,所以它们之间的唯一链接是创建它们的适配器。因此,您可以在Fragment及其适配器之间设置回调:
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_ACTION_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
}
}
从这里,您的适配器现在会在您对EditText执行操作时收到EditText输入(一旦适配器调用setOnSendTextListener
并将其设置为自身,您将在下面看到)。唯一剩下的就是将此消息传递回相应的片段,可能在getItem
期间作为Bundle中的参数之一。
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开发人员指南Creating event callbacks to the activity)以获取更多信息。
附注:您可能会遇到适配器正确接收回调信息的问题,但是传递数据的片段不会重新加载数据(即使您正在调用notifyOnDataSetChanged()
。这本身就是另外一个问题,我想引导你another SO question about ViewPager refreshing fragments进一步阅读。
答案 2 :(得分:0)
在您发布的教程中,我认为您必须实现getItem override方法。 在该网页中查找文字:
创建一个扩展FragmentStatePagerAdapter抽象的类 class并实现getItem()
扩展Fragment或PagerAdapter的想法很常见。我为PagerAdapter做了这件事,我很高兴。