正如标题所说,我试图弄清楚哪一个是在片段中注入依赖的最佳方式.我希望独立于RoboGuice等外部框架.
现在,以最简单的方式,我有一个抽象某种逻辑的接口,并且,从一个Activity,我想注入一个这个接口的实现.我知道我必须为我的片段提供一个默认构造函数,因为系统可能需要在某个时刻重新创建片段,并且创建片段的新实例的常用方法是提供处理创建的静态方法这个:
public static Fragment newInstance() {
final Bundle bundle = new Bundle();
...
final Fragment fragment = new MyFragment();
fragment.setArguments(bundle);
return fragment;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能将依赖关系传递给片段?我应该让它实现Parcelable或Serializable接口,然后将它打包到Bundle中吗?有没有其他方法来实现结果?
dependencies android dependency-injection code-injection fragment
我正在尝试开发一个小型的Android应用程序.应用程序很简单,在登录视图后,我显示一个承载ListFragment的Activity.当用户点击列表中的项目时,我想生成一个新的片段,其中包含所单击项目的详细信息.所以,要实现这一点,我的代码看起来像这样:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FragmentManager fragmentManager = getFragmentManager();
final Fragment listFragment = MyListFragment.newInstance(new MyItemClickListener() {
@Override
public void displayDetailsFor(Item item) {
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment_container, DetailsFragment.newInstance(status));
transaction.addToBackStack(null);
transaction.commit();
}
});
final Fragment container = fragmentManager.findFragmentById(R.id.fragment_container);
if (container == null) {
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, listFragment);
fragmentTransaction.commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyItemClickListener接口就是这样的:
public interface MyItemClickListener extends Serializable {
void displayDetailsFor(Status status);
}
Run Code Online (Sandbox Code Playgroud)
为了完成这个事情,在我的列表片段中,当用户选择一个项目时,我只是像这样调用监听器的方法:
@Override
public void …Run Code Online (Sandbox Code Playgroud)