我已经实施了Android Training Site中的Android教程,到目前为止一切正常。
在Fragment
内,我添加了一个EditText
字段,用户可以在其中输入简单的文本字符串。
我想要达到的目标是:如果用户输入了某些内容,然后向左或向右滑动,则输入也应该“复制”到新片段中。
在培训中,我有一个ScreenSlidePageFragment.java类和一个ScreenSlideActivity.java类。
我在ScreenSlidePageFragment 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上接收它。如何更新指定的片段? 在ScreenSlideActivity中,我尝试将其发送回新片段。
@Override
public void sendData(String inpString) {
WHATFRAGMENT.changeData(inpString);
}
但是如何访问在ScreenSlidePagerAdapter中创建的另一个(WHATFRAGMENT):
@Override
public Fragment getItem(int position) {
return NewReservationSlidePageFragment.create(position);
}
我是否需要创建一个完整的片段并覆盖新的位置?或者甚至有必要解决这个活动?是否有可能以某种方式使用FragmentTransaction
?
最简单的解决方案是什么?
答案 0 :(得分:2)
您可以使用interface
和public void setUserVisibleHint(boolean isVisibleToUser)
在您的界面中再添加一个方法,例如
public interface Communicator {
void sendData(String inpString);
String getData();
}
在你的活动中,在全局创建一个String变量来存储值。
并将sendData
中的数据分配到
@Override
public void sendData(String inpString) {
this.value = inpString;
//WHATFRAGMENT.changeData(inpString);
}
并在您的活动中实施getData
@Override
public void getData() {
return this.value;
}
在片段中添加setUserVisibleHint
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if(isVisibleToUser) {
mCallback.sendData("[string from your edit text]");
} else {
String value = mCallback.getData();
}
}
现在,您可以看到您在一个片段中编辑的数据可以显示在其他可见片段中。