通常情况下,我会使用不同的XML文件为我希望显示的每个“屏幕”使用单独的活动。
但是我正在使用动态加载jar文件到android应用程序中,因此在运行时,我不知道会有多少活动,或者会有多少个屏幕。
目前,使用java反射,我能够从动态加载的java文件中返回一个字符串列表,并将每个列表项作为一个单独的按钮绘制到屏幕上。如果单击其中一个按钮,我希望能够在堆栈上加载不同的“屏幕”。因此,当我从这个新屏幕按回来时,它会转到上一个调用它的屏幕。
是否可以在不创建新活动并向其传递新意图的情况下执行此操作,当然还可以对android清单文件进行相关更改?
使用黑莓功能作为一个例子 - 在黑莓的推送和弹出屏幕中是否有与Android相同的功能?屏幕推送/弹出的地方,只会扩展到MainScreen?
如果有人有疑问,或者如果我一直含糊不清,请发表评论,我会尽力解释自己,非常感谢任何帮助。
答案 0 :(得分:3)
与BB的推/弹屏相当的Android是startActivity()
/ finish()
。但是,您可以通过使用容器视图(例如ViewSwitcher
,如@hasanghaforian建议)或通过简单地使用新视图层次结构调用setContentView()
来管理您自己的单个活动中的视图。改变屏幕。请注意,当您致电setContentView
时,通过调用findViewById
获得的任何视图引用都将过时。
答案 1 :(得分:0)
您可以使用ViewSwitcher
。 ViewSwitcher是一个ViewAnimator,在两个视图之间切换,并有一个工厂,可以从中创建这些视图。您可以使用工厂创建视图,也可以自己添加它们。 ViewSwitcher只能有两个子视图,其中一次只显示一个。您可以使用fragments
。
答案 2 :(得分:0)
如果您参考同一活动中是否可以有不同的布局,答案是肯定的。
活动与布局无关,您不为清单中的活动分配布局,您可以在Activity中调用setContentView()方法的活动中定义要使用的布局来设置布局。
因此,如果您想要一些布局(屏幕),您唯一需要做的就是定义各种布局并在需要调用setContentView(R.layout.the布局)时使用它们,在此调用之后,所选择的布局将显示。
如果您无法通过xml静态创建布局,则可以根据需要随时根据需要通过代码创建它。
此外,您可以拥有一堆布局,每次需要一个新屏幕,构建它,将其推送到堆栈并调用setContentView()方法,当您不需要它时,弹出堆栈并使用堆栈顶部的新布局调用setContentView()。
希望对你有帮助
答案 3 :(得分:0)
在我看来你应该使用Fragment。我假设你有一些代码片段,你迭代字符串:
for(String def : definitions) {
Fragment f = new CustomFragment();
Bundle b = new Bundle();
b.putString("STRING_DEF",def);
f.setArguments(b);
fragments.add(f);
}
在上面的代码中,只创建了Framents
的集合。我们来看看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();
}