gpt4 book ai didi

java - 在一个Activity中组织多个Fragment接口(interface)

转载 作者:行者123 更新时间:2023-11-29 02:30:59 27 4
gpt4 key购买 nike

我正在创建一个在单个 Activity 中使用多个 fragment 的应用程序,并且大多数 fragment 需要与 Activity 交互。我为 Activity 实现的每个 fragment 使用单独的接口(interface)。

让你了解它现在的样子

public class MainActivity extends AppCompatActivity implements
Fragment1.Fragment1Interface,
Fragment2.Fragment2Interface,
ListAdapter1.ListAdapter1Interface,
Fragment3.Fragment3Interface,
MyDrawerLayout.MyDrawerCallbacks {

/* Code omitted for brevity... */

@Override
public void onCancel(long id) {

}

@Override
public void onSave(long id) {

}

}

可以看到,需要实现的接口(interface)还是蛮多的。这没关系,但令我困扰的是,各种接口(interface)的方法的实现并没有提供任何关于它们属于哪个接口(interface)/fragment 的线索。 onCancel()onSave() 是非常通用的,所以只看代码无法知道它们是否属于 Fragment1Interface , Fragment2Interface

当然,我可以在每个接口(interface)方法前加上接口(interface)名称作为前缀,结果类似于

@Override
public void Fragment1Interface_onCancel(long id) {

}

@Override
public void Fragment2Interface_onSave(long id) {

}

等等。

是否有任何简单的方法可以实现某种关于接口(interface)实现的“范围界定”?我知道我可以将一个对象传递给实现相应接口(interface)的每个 fragment ,但这比简单地依赖可以通过 getActivity() 从 fragment 中轻松检索的 Activity 要多得多。

我考虑过的另一个选择是有一个像

这样的通用接口(interface)
public interface FragmentInteractionInterface{
public FragmentInterface getInterface(Fragment fragment);
}

public interface FragmentInterface{}


public interface Fragment1Interface extends FragmentInterface{
public void onCancel(long id);
}

public interface Fragment2Interface extends FragmentInterface{
public void onSave(long id);
}

这里的想法是,Activity 将只实现 FragmentInteractionInterface,并根据 getInterface() 中的 fragment 类型返回 FragmentInterface 的特定实现,如下所示

public FragmentInterface getInterface(Fragment fragment){
if( fragment instanceof Fragment1 )
return mFragment1InterfaceImplementation;
else if( fragment instanceof Fragment2 )
return mFragment2InterfaceImplementation;
}


Fragment1Interface mFragment1InterfaceImplementation = new Fragment1Interface(){
@Override
public void onCancel(long id){
// Do something
}
}

Fragment2Interface mFragment2InterfaceImplementation = new Fragment2Interface(){
@Override
public void onSave(long id){
// Do something
}
}

(显然 fragment 的名字在现实生活中更具描述性!)

我能想到的唯一其他(简单)方法是用注释包围每个已实现的接口(interface)方法,将它们组合在一起(一些接口(interface)包含许多方法)。

似乎应该有更好的方法来以简单的方式实现这种“分组”,而不必诉诸必须将单独的实现对象传递给每个 fragment ……有什么想法吗?

最佳答案

一般来说,防止客户端( fragment )知道它们不使用的方法是一种很好的做法。此类接口(interface)称为角色接口(interface),因此我坚持使用按 fragment 接口(interface)的方法。

回答您的问题,为什么您如此确信实现者应该明确指定接口(interface)/方法关系?您指出方法名称过于通用,但这是命名问题。 fragment 范围内的操作应该保留在那里,因此逻辑上与 Activity 相关的操作将具有适当的命名。

如果您仍然坚持这种完全分离的想法,我建议您使用某种注释处理。

关于java - 在一个Activity中组织多个Fragment接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com