2016-03-10 77 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(); 

好多次創建這個片段運氣和快樂編碼!