Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个Android应用程序中,是否可以创建多个屏幕,仅使用一个活动?_Android_Blackberry_Dynamic_Stack_Screen - Fatal编程技术网

在一个Android应用程序中,是否可以创建多个屏幕,仅使用一个活动?

在一个Android应用程序中,是否可以创建多个屏幕,仅使用一个活动?,android,blackberry,dynamic,stack,screen,Android,Blackberry,Dynamic,Stack,Screen,通常,我会使用不同的XML文件为我希望显示的每个“屏幕”使用单独的活动 然而,我正在将jar文件动态加载到android应用程序中,因此在运行时,我不知道会有多少活动,或者会有多少屏幕 目前,使用java反射,我能够从动态加载的java文件返回字符串列表,并将每个列表项作为单独的按钮绘制到屏幕上。如果单击其中一个按钮,我希望能够在堆栈上加载不同的“屏幕”。因此,当我从这个新屏幕按back时,它会转到调用它的前一个屏幕 是否可以在不创建新活动和向其传递新意图的情况下执行此操作,当然也不需要对and

通常,我会使用不同的XML文件为我希望显示的每个“屏幕”使用单独的活动


然而,我正在将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应用程序中”——为什么?嗯,我知道