我已经实现了 Android Training Site 中的 Android 教程到目前为止一切正常。
在 Fragment
内部,我添加了一个 EditText
字段,用户可以在其中输入简单的文本字符串。
我想要实现的是:如果用户输入了某些内容,然后向左或向右滑动,则输入也应该“复制”新 fragment 。
在训练中,我有一个 ScreenSlidePageFragment.java 类和一个 ScreenSlideActivity.java 类。
我在 ScreenSlidePageFragment 中实现了一个接口(interface),as mentioned here :
Communicator mCallback;
public interface Communicator {
void sendData(String inpString);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallback = (Communicator) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "must Implement OnEditChangedListener");
}
}
但最后,我只是设法在 ScreenSlideActivity 上收到它。如何更新指定的 fragment ? 在 ScreenSlideActivity 中,我尝试将其发送回新 fragment 。
@Override
public void sendData(String inpString) {
WHATFRAGMENT.changeData(inpString);
}
但是我如何访问在 ScreenSlidePagerAdapter 中创建的另一个 (WHATFRAGMENT):
@Override
public Fragment getItem(int position) {
return NewReservationSlidePageFragment.create(position);
}
我需要创建整个 fragment 并覆盖新位置吗?或者甚至有必要解决 Activity 问题吗?是否可以以某种方式使用FragmentTransaction
?
最简单的解决方案是什么?
最佳答案
您可以使用界面
和public void setUserVisibleHint(boolean isVisibleToUser)
在您的界面中再添加一种方法,如下所示,
public interface Communicator {
void sendData(String inpString);
String getData();
}
并在您的 Activity 中全局创建一个字符串变量来存储该值。
并分配来自 sendData
的数据
@Override
public void sendData(String inpString) {
this.value = inpString;
//WHATFRAGMENT.changeData(inpString);
}
并在您的 Activity 中也实现 getData
@Override
public void getData() {
return this.value;
}
在 fragment 中添加 setUserVisibleHint
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if(isVisibleToUser) {
mCallback.sendData("[string from your edit text]");
} else {
String value = mCallback.getData();
}
}
现在您可以看到您在一个 fragment 中编辑的数据可以显示在其他可见 fragment 中。
关于android - 在 fragment 上输入 EditText 并填充所有其他 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509569/