您可以为这种情况使用一名演示者。
使用您的 Activity Presenter 获取片段所需的所有数据。
然后创建一个接口类并将其实现到您的片段中。
例如:
为您的 PageAFragment 创建一个公共接口(此接口将连接您的数据从活动到片段)。并使用您界面的方法来处理来自您的演示者的结果以查看。
这是我为接收数据创建的接口类的示例。对于参数,你可以选择你想要的,这取决于你的需要,但对我来说,我选择模型。
public interface CallbackReceivedData {
void onDataReceived(YourModel model);
}
在 MainActivity 类中检查附加到您的活动中的片段实例。在提交片段后放置您的检查实例。
public class MainActivity extends AppCompatActivity{
private CallbackReceivedData callbackReceivedData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//after commit the fragment
if (fragment instanceof PageAFragment){
callbackReceivedData = (CallbackReceivedData)fragment;
}
}
//this is the example method of MainActivity Presenter,
//Imagine it, as your view method.
public void receivedDataFromPresenter(YourModel model){
callbackReceivedData.onDataReceived(model);
}
}
我假设 receivedDataFromPresenter 是我们视图的接收方法并将数据获取到演示者。
现在我们将把数据从presenter传递给callbackReceivedData
在 PageAFragment 中实现 CallbackReceivedData 并重写 onDataReceived 方法。现在您可以将数据从活动传递到您的片段。
public class PageAFragment extends Fragment implements CallbackReceivedData{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onDataReceived(YourModel model) {
}
}
注意:另一种方式,您可以使用 Bundle 并使用 setArguments 传递数据。
如果你想将事件从Fragment发送到Activity,你可以按照这个想法。
创建一个接口类并将其实现到您的 MainActivity 并覆盖从接口到您的活动的方法,对于我来说,我这样做是这样的。
这是我的 CallbackSendData 类。
public interface CallbackSendData {
void sendDataEvent(String event);
}
为您的 MainActivity 实现 CallbackSendData 接口并覆盖 sendDataEvent 方法。
public class MainActivity extends AppCompatActivity implements CallbackSendData{
private CallbackReceivedData callbackReceivedData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//after commit the fragment
if (fragment instanceof PageAFragment){
callbackReceivedData = (CallbackReceivedData)fragment;
}
}
//this is the example method of MainActivity Presenter,
//Imagine it, as your view method.
public void receivedDataFromPresenter(YourModel model){
callbackReceivedData.onDataReceived(model);
}
@Override
public void sendDataEvent(String event){
//You can now send the data to your presenter here.
}
}
对于您的 PageAFragment,您需要使用附加方法来投射您的界面。一旦片段与其活动相关联,就会调用 attach 方法。如果您想了解 Fragment 的生命周期,请点击此链接:https://developer.android.com/reference/android/app/Fragment.html。
public class PageAFragment extends Fragment implements CallbackReceivedData{
private CallbackSendData callbackSendData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onDataReceived(YourModel model) {
//Received the data from Activity to Fragment here.
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.PagerAFragment, container,
false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle
savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Button Eventbutton;
Eventbutton = view.findViewById(R.id.event_button);
Eventbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callbackSendData.sendDataEvent("send Data sample");
}
});
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
callbackSendData = (CallbackSendData) context;
}catch (ClassCastException e){
e.printStackTrace();
}
}
}
现在您可以使用 CallbackSendData 将数据从活动发送到片段。
注意:如果你在项目中使用依赖注入会容易得多,你可以使用 Dagger2 库。
祝你好运。