2

我已经从Android Training Site实施Android教程,并且一切工作到目前为止。在片段上输入EditText,并填写所有其他片段

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); 
} 

但怎样访问另一个(WHATFRAGMENT),这是在ScreenSlidePagerAdapter创建:

@Override 
public Fragment getItem(int position) { 
    return NewReservationSlidePageFragment.create(position); 
} 

我需要创建一个完整的片段,并覆盖新位置?还是有必要解决该活动?以某种方式可以使用FragmentTransaction吗?

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

回答

2

您可以在您的接口你这样的interfacepublic void setUserVisibleHint(boolean isVisibleToUser)

再添加一个方法实现,

public interface Communicator { 
    void sendData(String inpString); 
    String getData(); 
} 

而且在你活动创建一个字符串变量在全球范围内存储的值。

,并指定数据即将形式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(); 
    } 
} 

现在你可以看到你edi的数据在一个片段中可以显示其他可见片段。

+0

'getData()'方法不是必须的。每个'Fragment'将在从'FragmentManager'中删除时调用'sendData()',可能在'onPause()'中。 “Activity”可能实现了接口并将数据转发到下一个“Fragment”。 –

+0

如果您使用视图寻呼机** onPause **并且** OnResume **在当时不会接听电话,我们应该只使用** setUserVisibleHint **方法。 –

+0

@MuthukrishnanRajendran非常感谢,现在它工作。以前不知道'setUserVisibleHint()'。 但是在某一时刻,我得到了一个可能会让用户感到困惑的行为:如果文本字段在其他片段之一上发生了更改,并且被刷回,则数据不会被覆盖。它仍然是“旧”字符串,即使我尝试清除它之前:'myEditTxt.getText()。clear()' – a2hur