在一个Android应用程序中,是否可以创建多个屏幕,仅使用一个活动?
通常,我会使用不同的XML文件为我希望显示的每个“屏幕”使用单独的活动在一个Android应用程序中,是否可以创建多个屏幕,仅使用一个活动?,android,blackberry,dynamic,stack,screen,Android,Blackberry,Dynamic,Stack,Screen,通常,我会使用不同的XML文件为我希望显示的每个“屏幕”使用单独的活动 然而,我正在将jar文件动态加载到android应用程序中,因此在运行时,我不知道会有多少活动,或者会有多少屏幕 目前,使用java反射,我能够从动态加载的java文件返回字符串列表,并将每个列表项作为单独的按钮绘制到屏幕上。如果单击其中一个按钮,我希望能够在堆栈上加载不同的“屏幕”。因此,当我从这个新屏幕按back时,它会转到调用它的前一个屏幕 是否可以在不创建新活动和向其传递新意图的情况下执行此操作,当然也不需要对and
然而,我正在将jar文件动态加载到android应用程序中,因此在运行时,我不知道会有多少活动,或者会有多少屏幕 目前,使用java反射,我能够从动态加载的java文件返回字符串列表,并将每个列表项作为单独的按钮绘制到屏幕上。如果单击其中一个按钮,我希望能够在堆栈上加载不同的“屏幕”。因此,当我从这个新屏幕按back时,它会转到调用它的前一个屏幕 是否可以在不创建新活动和向其传递新意图的情况下执行此操作,当然也不需要对android清单文件进行相关更改 以黑莓手机的功能为例,安卓系统中是否有类似于黑莓推送和弹出屏幕的功能?屏幕按下/弹出的位置,会简单地扩展主屏幕吗
如果有任何人有问题,或者我含糊不清,请发表评论,我会尽力解释我自己,非常感谢您的帮助。您可以使用
ViewSwitcher
。ViewSwitcher是一个ViewAnimator,可在两个视图之间切换,并具有一个创建这些视图的工厂。您可以使用工厂创建视图,也可以自己添加视图。一个ViewSwitcher只能有两个子视图,一次只能显示其中一个子视图。或者您可以使用片段
您可以使用ViewSwitcher
。ViewSwitcher是一个ViewAnimator,可在两个视图之间切换,并具有一个创建这些视图的工厂。您可以使用工厂创建视图,也可以自己添加视图。一个ViewSwitcher只能有两个子视图,一次只能显示其中一个子视图。或者您可以使用片段
相当于BB推/弹出屏幕的Android是startActivity()
/finish()
。但是,您可以通过使用容器视图(如@hasanghaforian建议的ViewSwitcher
)或在需要更改屏幕时使用新的视图层次结构调用setContentView()
,在单个活动中管理自己的视图。请注意,当您调用setContentView
时,通过调用findViewById
获得的任何视图引用都将过时。相当于BB推/弹出屏幕的Android是startActivity()
/finish()
。但是,您可以通过使用容器视图(如@hasanghaforian建议的ViewSwitcher
)或在需要更改屏幕时使用新的视图层次结构调用setContentView()
,在单个活动中管理自己的视图。请注意,当您调用setContentView
时,通过调用findViewById
获得的任何视图引用都将过时。如果您提到在同一活动中是否可能有不同的布局,则答案是肯定的
活动独立于布局,您不为清单中的活动分配布局,而是定义在活动中使用什么布局,从活动类调用setContentView()方法来设置布局
因此,如果您想拥有一些布局(屏幕),您唯一需要做的就是定义各种布局,并在调用setContentView(R.layout.the layout)时使用它们,在调用之后,将显示所选的布局
如果不能通过xml静态地创建布局,则可以根据需要随时通过代码进行动态创建
此外,您还可以拥有一个布局堆栈,每次需要新屏幕时,构建它,将其推送到堆栈并调用setContentView()方法,当您不再需要它时,弹出堆栈并使用堆栈顶部的新布局调用setContentView()
希望它能帮助您如果您提到在同一活动中是否可能有不同的布局,答案是肯定的 活动独立于布局,您不为清单中的活动分配布局,而是定义在活动中使用什么布局,从活动类调用setContentView()方法来设置布局 因此,如果您想拥有一些布局(屏幕),您唯一需要做的就是定义各种布局,并在调用setContentView(R.layout.the layout)时使用它们,在调用之后,将显示所选的布局 如果不能通过xml静态地创建布局,则可以根据需要随时通过代码进行动态创建 此外,您还可以拥有一个布局堆栈,每次需要新屏幕时,构建它,将其推送到堆栈并调用setContentView()方法,当您不再需要它时,弹出堆栈并使用堆栈顶部的新布局调用setContentView()
希望它能帮助你在我看来,你应该使用Fragment。我假设您有一段代码,在其中迭代字符串:
for(String def : definitions) {
Fragment f = new CustomFragment();
Bundle b = new Bundle();
b.putString("STRING_DEF",def);
f.setArguments(b);
fragments.add(f);
}
在上面的一段代码中,刚刚创建了框架的集合。让我们看看CustomFragment
实现:
CustomFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String def = getArguments.getString("STRING_DEF");
//write code to create view
return view;
}
}
现在,在您的ListActivity
中,您必须或多或少像这样实现单击侦听器
public void onListItemClick(ListView l, View v, int position, long id) {
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction t = fragMgr.beginTransaction();
t.replace(R.id.id_of_view_place_holder_for_fragment,
fragments.get(position),"FRAGMENT_TAG");
t.commit();
}
我认为你应该使用Fragment。我假设您有一段代码,在其中迭代字符串:
for(String def : definitions) {
Fragment f = new CustomFragment();
Bundle b = new Bundle();
b.putString("STRING_DEF",def);
f.setArguments(b);
fragments.add(f);
}
在上面的一段代码中,刚刚创建了框架的集合。让我们看看CustomFragment
实现:
CustomFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String def = getArguments.getString("STRING_DEF");
//write code to create view
return view;
}
}
现在,在您的ListActivity
中,您必须或多或少像这样实现单击侦听器
public void onListItemClick(ListView l, View v, int position, long id) {
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction t = fragMgr.beginTransaction();
t.replace(R.id.id_of_view_place_holder_for_fragment,
fragments.get(position),"FRAGMENT_TAG");
t.commit();
}
是的,您可能需要使用片段,“我正在将jar文件动态加载到android应用程序中”——为什么?嗯,我知道