Android片段的带参数继承

时间:2020-06-14 22:41:26

标签: android android-fragments

我在android中是众所周知的,我不确定我是否使用正确的方法。

我想制作一个具有一些级别的小型游戏,用户根据他在屏幕上看到的内容以及是否有效-进行级别输入。

我有LevelActivity,它管理不同级别的片段。我想将 LevelFragment 设为abstruct类,然后使用诸如 SimplestLevelFragment 之类的其他子片段(级别)对其进行扩展。

所有级别都有一些常见的论点,我不知道如何将其传递给超类

提供的代码:

LevelFragment.java

public abstract class LevelModelFragment extends Fragment {

protected boolean completed;
private int id;
private String name;
private String[] hints;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return provideFragmentView(inflater, container, savedInstanceState);
}

protected abstract View provideFragmentView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState);

public abstract boolean checkCompletion();

public abstract void handleInput(String input);}

SimplestLevelFragment.java

public class SimplestLevelFragment extends LevelModelFragment {

private final static int id = 1;
private final static String name = "The simplest level I have ever seen";
private final static String[] hints = {"Enter the name of program"};

@Override
protected View provideFragmentView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.simpleLevelLayout,parent,false);
    //Now specific components here (you can initialize Buttons etc)
    return view;
}

@Override
public boolean checkCompletion() {
    return this.completed;
}

@Override
public void handleInput(String input) {
    if(input == "Secret Path"){
        this.completed = true;
    }
}}

也许我应该使用另一种架构方法?

1 个答案:

答案 0 :(得分:1)

初始化child Fragment时,应将公用参数放入Bundle中并调用setArguments。在方法super Fragment中的onCreate中,可以获取它。

Fragment child = new SimplestLevelFragment();
Bundle data = new Bundle();
// put common value to data
child.setArguments(data);
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle data = getArguments();
    // get common value you already pass
}
相关问题