片段的两个构造函数

时间:2016-05-18 17:56:38

标签: android android-fragments

是否可以为同一个Fragment提供两个不同的构造函数?

这是我的情况:我有Fragment_AFragment_B几乎完全相同,除了一个获得一个整数而另一个获得一个字符串。

我可以这样:

public static VideoListFragment newInstanceA(String filterString) {
    VideoListFragment myFragment = new VideoListFragment();

    Bundle args = new Bundle();
    args.putString(FILTER, filterString);
    myFragment.setArguments(args);

    return myFragment;
}

public static VideoListFragment newInstanceB(String subjectId) {
    VideoListFragment myFragment = new VideoListFragment();

    Bundle args = new Bundle();
    args.putString(POSITION, subjectId);
    myFragment.setArguments(args);

    return myFragment;
}

如果可以,那么我将如何进入onCreate()这个论点?我以某种方式检查getArguments()`是否包含FILTER String或POSITION Integer。

2 个答案:

答案 0 :(得分:2)

您不能使用完全相同的方法签名来区分不同的输入行为。但是,您可以扩展输入参数以使其更加通用。这样的事情会有所帮助:

public class VideoListFragment extends Fragment {    
    public static VideoListFragment newInstance(String type, String val) {
        VideoListFragment myFragment = new VideoListFragment();

        Bundle args = new Bundle();
        args.putString(type, val);
        myFragment.setArguments(args);

        return myFragment;
    }
}

以后使用如下:

VideoListFragment frag1 = VideoListFragment.newInstance(FILTER, "value");  //for Filter
VideoListFragment frag2 = VideoListFragment.newInstance(POSITION, "value");//for Position

答案 1 :(得分:0)

Android文档在处理片段时不鼓励使用构造函数;你应该使用bundle。