Android-在活动中更改片段
我正在创建一个Android应用程序,它使用一个主活动和几个片段。主要活动是对所有内容的最小“控制”,每个片段显示一个包含不同信息的不同屏幕。以下是我主要活动的一些代码:Android-在活动中更改片段,android,fragment,Android,Fragment,我正在创建一个Android应用程序,它使用一个主活动和几个片段。主要活动是对所有内容的最小“控制”,每个片段显示一个包含不同信息的不同屏幕。以下是我主要活动的一些代码: public class MainMenu extends FragmentActivity implements FirstMenu.FragmentListener, Checklist.FragmentListener, Tool.FragmentListener{ @Override public void
public class MainMenu extends FragmentActivity implements FirstMenu.FragmentListener, Checklist.FragmentListener,
Tool.FragmentListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
FirstMenu firstMenu = new FirstMenu();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,
firstMenu).commit();
}
public void changeScreen() {
Checklist checklist = new Checklist();
android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, checklist);
transaction.addToBackStack(null);
transaction.commit();
}
public void changeScreenTwo() {
ChemicalCheckList chemChecklist = new ChemicalCheckList();
android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, chemChecklist);
transaction.addToBackStack(null);
transaction.commit();
}
这是我的第一个片段的代码,它显示了菜单:
public class FirstMenu extends Fragment {
FragmentListener fragmentChanger;
public interface FragmentListener {
public void changeScreen();
public void changeScreenFour();
public void changeScreenFive();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
fragmentChanger = (FragmentListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException();
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
container.removeAllViews();
View view = inflater.inflate(R.layout.menu, container, false);
Button checkListButton = (Button) view.findViewById(R.id.checklistButton);
Button toolButton = (Button) view.findViewById(R.id.toolButton);
Button timeFuseButton = (Button) view.findViewById(R.id.timeFuseCalculator);
Button blastFragButton = (Button) view.findViewById(R.id.blastFragButton);
Button demoButton = (Button) view.findViewById(R.id.demoButton);
checkListButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonClicked(v);
}
}
);
toolButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
toolButtonClicked(v);
}
}
);
demoButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
demoButtonClicked(v);
}
}
);
blastFragButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), BlastFrag.class);
startActivity(intent);
}
});
timeFuseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), TimeFuse.class);
startActivity(intent);
}
});
return view;
}
public void buttonClicked( View v ) {
fragmentChanger.changeScreen();
}
public void toolButtonClicked( View v ) {
fragmentChanger.changeScreenFour();
}
public void demoButtonClicked( View v ) {
fragmentChanger.changeScreenFive();
}
}
这是第二个片段的代码,它通过changeScreen()方法显示在屏幕上
我有更多的片段使用更多的方法显示在屏幕上,例如:changeScreenTwo()、changeScreenThree()、changeScreenFour()等等。这些方法的代码几乎完全相同。唯一的区别是它从不同的类创建不同的对象。我想知道我目前的做法是否可行,或者是否有一种方法可以将所有这些“changeScreen”方法合并成一个方法,并将每种类型的类作为参数传入。我已经找遍了所有地方,似乎找不到我在这个特殊情况下寻找的答案。传入一个片段索引,并使用它来选择片段类型
public void changeScreen(int position) {
switch(position){
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new Checklist())
.addToBackStack(null)
.commit();
break;
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new ChemicalCheckList())
.addToBackStack(null)
.commit();
break;
}
}
谢谢你的评论,我实现了这个解决方案,它似乎工作得很好。我正在寻找一种方法来稍微清理代码,它感觉做所有的复制和粘贴以及制作多个做同样事情的函数都不对。
public void changeScreen(int position) {
switch(position){
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new Checklist())
.addToBackStack(null)
.commit();
break;
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new ChemicalCheckList())
.addToBackStack(null)
.commit();
break;
}
}