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
,然后我该怎么做?