2016-03-10 84 views
0

基本上我有多个选项卡,它们都指向相同的.xml文件,几乎所有的都做同样的事情。我想创建一个Fragment类,然后在其他五个Fragment类中重新使用其全部内容。重复使用多个片段中的一个完整片段

所以这是我template类 - 我想所有的fragments重用一个:

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(){ 
     ... 
    } 

} 

Class TabTwo

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(){ 
     ... 
    } 

} 

正如你所看到的TabOneTabTwo几乎是相同的东西,这就是为什么我试图重用从TabTemplate类的一切。我该怎么做呢?

+0

不是扩展'Fragment',扩展'TabTemplate'? – Ozgur

+0

然后我该怎么办? –

回答

0

只能使用您的片段类之一,做这样的事情:

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(); 

好多次创建这个片段运气和快乐编码!