Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
Java Android-选项卡、地图视图、选项卡内的活动_Java_Android_Android Widget - Fatal编程技术网

Java Android-选项卡、地图视图、选项卡内的活动

Java Android-选项卡、地图视图、选项卡内的活动,java,android,android-widget,Java,Android,Android Widget,我们正在编写一个包含4个选项卡的应用程序:地图、人物、地点和事件。应用程序中的人物、地点和事件在地图上显示为图标。默认情况下,“人员”、“地点”和“事件”选项卡分别显示一个列表视图、自定义渲染,分别显示所有人员、地点和事件 现在,每个选项卡都有一个启动相应活动的意图集作为其内容。例如,有一个MapTabActivity扩展了MapActivity,一个ShowPeopleListActivity显示了人物,等等 我看到a/answers说,由于TabHost设置方式的各种限制,最好不要将活动用

我们正在编写一个包含4个选项卡的应用程序:地图、人物、地点和事件。应用程序中的人物、地点和事件在地图上显示为图标。默认情况下,“人员”、“地点”和“事件”选项卡分别显示一个列表视图、自定义渲染,分别显示所有人员、地点和事件

现在,每个选项卡都有一个启动相应活动的意图集作为其内容。例如,有一个MapTabActivity扩展了MapActivity,一个ShowPeopleListActivity显示了人物,等等

我看到a/answers说,由于TabHost设置方式的各种限制,最好不要将活动用作选项卡的内容。例如,不可能启动一个新的活动并让它取代选项卡中的现有活动,而可以切换出具有不同视图的视图

现在,我正处于十字路口。我们(无论是好是坏)花了相当多的时间试图让这个应用程序按照当前的结构工作,活动作为选项卡的内容。当单击与人、地点或事件对应的图标时,它会在与该对象对应的URI上激发一个视图意图;这由一个活动拾取,然后显示该对象。同样的机制在地图和单个列表中都起作用。我们真的很喜欢这种松耦合;我们只需给person/place/event一个VIEW命令和URI,它就会自动将我们带到正确的活动。诚然,启动的活动掩盖了选项卡视图,而不是出现在其中,但我们愿意接受这一点

但这里有一个问题:从展示活动中,我们希望能够回到地图,以那个人、地点或事件为中心。我们可以启动一个新的活动来再次显示地图,但是现在我们将地图活动作为选项卡的内容,加上显示活动,再加上活动堆栈中的新地图活动;考虑到地图活动的资源密集程度,我猜这不是理想的方式

我想我的问题是,有没有一个好的教程确切地展示了如何使用TabHost完成复杂的任务?我见过;我在寻找比这更复杂的东西。我担心如果我们切换到基于视图的方式,我们将不得不进行大量的内务处理,以拦截所有的后台事件,尝试切换出视图,等等,以及以我们不希望的方式强烈耦合我们的程序

如能就今后的工作提出任何建议,我们将不胜感激。我们是Android新手,所以我们尝试遵循既定的最佳实践,但是当我们看到的几个例子对于我们的用例来说过于简单化时,这是很困难的

我看到了很多人 由于以下原因而提出的问题/答案 系统运行方式中的各种限制 TabHost已设置,最好不要使用 活动作为选项卡的内容

作为反活动标签联盟(AATA)的自封主席,这当然是我的立场

当一个图标对应于一个 单击人员、地点或事件,则 激发URI上的视图 对应于该对象;这是 被当时的一项活动所接受 显示对象

请注意,这与将活动作为选项卡的内容无关

我们可以发起一个新的活动来展示 地图又来了,但现在我们有地图了 活动作为选项卡的内容, 再加上表演活动,再加上新的 在活动堆栈中映射活动; 考虑到地图的资源密集程度 活动是,我猜这不是 理想的方式

如果可能的话,我会避免的

我担心如果我们换成 基于视图的做事方式,我们将 我得做很多家务来维持秩序 拦截所有后台事件,尝试 根据需要,切换出视图等 以及我们的程序的强耦合 在某种程度上我们不想要

这与你之前写的完全不同。在将视图用作选项卡内容和将活动用作选项卡内容之间,您的“返回事件”不会改变一个iota。此外,这与您描述的“松耦合”模式没有任何关系——单击选项卡中视图中列表中的图标与单击选项卡中活动中视图中列表中的图标无异

只要让你的表演活动告诉你的,嗯,主要活动显示一个特定的位置,那么表演活动就可以
finish()
。在活动之间不引入硬JVM耦合的最简单方法是广播
意图
,并在主活动中注册
广播接收器
。收到此
意图后,主活动将更新地图并将其设置为当前选项卡。当然,如果您将主活动使用视图作为其选项卡内容,则这种方法更简单


现在,如果你试图彻底检查你的应用程序,这样在一个选项卡中导航就不会启动另一个活动,而是将内容保存在它自己的选项卡中……这是一个非常复杂的问题。

为你的选项卡设置一个活动和多个视图是一个很好的做法。但是,这意味着您必须小心处理所选的选项卡、每个选项卡视图的不同菜单和上下文菜单等

我想我的问题是,有没有 很好的教程 确切地说,如何使用 塔布霍斯特?我见过他很傻;我是 寻找更多的东西 比这更复杂

我在我的博客上写了一个稍微好一点的教程,演示了作为选项卡的交互式ListView和MapView。以下是链接:

基础是要有一个类似于HelloTabWidget教程中的布局,使您的活动从MapActivity扩展,从XML中提取tabhost
public class TabbedListMapActivity extends MapActivity {

private ListView listView;
private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tabHost = (TabHost) findViewById(android.R.id.tabhost);

    // setup must be called if not a TabActivity
    tabHost.setup();

    // setup list view
    listView = (ListView) findViewById(R.id.list);

    // setup map view
    mapView = (MapView) findViewById(R.id.mapview);

    // add views to tab host
    tabHost.addTab(tabHost.newTabSpec("List").setIndicator("List").setContent(new TabContentFactory() {
        public View createTabContent(String arg0) {
            return listView;
        }
    }));
    tabHost.addTab(tabHost.newTabSpec("Map").setIndicator("Map").setContent(new TabContentFactory() {
        public View createTabContent(String arg0) {
            return mapView;
        }
    }));
}