在片段上输入EditText并填充所有其他片段

时间:2017-08-04 14:38:10

标签: android android-fragments android-edittext android-viewpager

我已经实施了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

最简单的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用interfacepublic 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();
    }
}

现在,您可以看到您在一个片段中编辑的数据可以显示在其他可见片段中。