Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多个片段中重用一个完整片段_Java_Android_Android Fragments_Code Reuse - Fatal编程技术网

Java 在多个片段中重用一个完整片段

Java 在多个片段中重用一个完整片段,java,android,android-fragments,code-reuse,Java,Android,Android Fragments,Code Reuse,基本上,我有多个选项卡,它们都引用相同的.xml文件,并且几乎都做相同的事情。我想创建一个Fragment类,然后在其他五个Fragment类中重用其全部内容 这是我的模板类-我希望所有片段重用的类: public class TabTemplate extends Fragment { TimePicker timePickerOne; EditText forename; EditText surname; EditText email; EditTe

基本上,我有多个选项卡,它们都引用相同的
.xml
文件,并且几乎都做相同的事情。我想创建一个
Fragment
类,然后在其他五个
Fragment
类中重用其全部内容

这是我的
模板
类-我希望所有
片段
重用的类:

public class TabTemplate extends Fragment {
    TimePicker timePickerOne;
    EditText forename;
    EditText surname;
    EditText email;
    EditText telephone;
    Button store;

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

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tabfill, container, false);
        timePickerOne = (TimePicker) rootView.findViewById(R.id.timePickers);
        forename = (EditText) rootView.findViewById(R.id.forename);
        surname = (EditText) rootView.findViewById(R.id.surname);
        email = (EditText) rootView.findViewById(R.id.email);
        telephone = (EditText) rootView.findViewById(R.id.telephone);
        store = (Button) rootView.findViewById(R.id.store);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    public void populate(){
        ...
    }

}
目前我有这样的想法:
TabOne

public class TabOne extends Fragment {
    TimePicker timePickerOne;
    EditText forename;
    EditText surname;
    EditText email;
    EditText telephone;
    Button store;

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

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tabfill, container, false);
        timePickerOne = (TimePicker) rootView.findViewById(R.id.timePickers);
        forename = (EditText) rootView.findViewById(R.id.forename);
        surname = (EditText) rootView.findViewById(R.id.surname);
        email = (EditText) rootView.findViewById(R.id.email);
        telephone = (EditText) rootView.findViewById(R.id.telephone);
        store = (Button) rootView.findViewById(R.id.store);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    public void populate(){
        ...
    }

}
类选项卡二

public class TabTwo extends Fragment {
    TimePicker timePickerOne;
    EditText forename;
    EditText surname;
    EditText email;
    EditText telephone;
    Button store;

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

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tabfill, container, false);
        timePickerOne = (TimePicker) rootView.findViewById(R.id.timePickers);
        forename = (EditText) rootView.findViewById(R.id.forename);
        surname = (EditText) rootView.findViewById(R.id.surname);
        email = (EditText) rootView.findViewById(R.id.email);
        telephone = (EditText) rootView.findViewById(R.id.telephone);
        store = (Button) rootView.findViewById(R.id.store);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    public void populate(){
        ...
    }

}

正如您所看到的,
TabOne
TabTwo
几乎是一样的,这就是为什么我试图重用
TabTemplate
类中的所有内容。如何执行此操作?

仅使用一个片段类,并执行以下操作:

public class TabTemplate extends Fragment {
    TimePicker timePickerOne;
    EditText forename;
    EditText surname;
    EditText email;
    EditText telephone;
    Button store;

    String argOne;

    // This allows you to tell the Tab Activity Bundle options for whatever you want to do
    public static TabTemplate newInstance(Bundle args){
         TabTemplate fragment = new TabTemplate();
         if(args != null){
            fragment.setArguments(args);
         }
       return fragment;
    }

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

        if(getArguments() != null){
         // Can retrieve the arguments once it has been created
         Bundle args = getArguments();
         argOne = args.getString("SOME_KEY", "Default Value");

        }

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tabfill, container, false);
        timePickerOne = (TimePicker) rootView.findViewById(R.id.timePickers);
        forename = (EditText) rootView.findViewById(R.id.forename);
        surname = (EditText) rootView.findViewById(R.id.surname);
        email = (EditText) rootView.findViewById(R.id.email);
        telephone = (EditText) rootView.findViewById(R.id.telephone);
        store = (Button) rootView.findViewById(R.id.store);
        return rootView;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        populate();
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    public void populate(){
        //... do something with the values here
        forename.setText(argsOne);

    }

}
然后,您可以使用不同的
Bundle
params多次创建此片段

Bundle bundleOne = new Bundle();
bundleOne.putString("SOME_KEY", "Hello Tab One!");
TabTemplate fragmetTabOne = TabTemplate.newInstance(bundleOne);
getSupportFragmentManager().beginTransaction().add(R.id.someViewId, fragmentTabOne, "TAG").commit();

Bundle bundleTwo = new Bundle();
bundleOne.putString("SOME_KEY", "Hello Tab Two!");
TabTemplate fragmetTabTwo = TabTemplate.newInstance(bundleTwo);
getSupportFragmentManager().beginTransaction().add(R.id.someOtherViewId, fragmetTabTwo, "TAG").commit();
等等


祝你好运和快乐

扩展
TabTemplate
,而不是扩展
Fragment
,然后我该怎么做?