小编The*_*ter的帖子

Android片段和依赖注入

正如标题所说,我试图弄清楚哪一个是在片段中注入依赖的最佳方式.我希望独立于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

10
推荐指数
2
解决办法
4637
查看次数

单击后退按钮时出现java.io.NotSerializableException

我正在尝试开发一个小型的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)

android android-activity

3
推荐指数
1
解决办法
2378
查看次数