当我尝试使用replace方法替换片段以使用另一个地图片段登录到服务器时,我遇到了一个问题,但这是发生的事情:新片段(应该是亚马逊地图片段)only takes half of the screen。一旦用户点击登录按钮,它应该变成新的片段(我也尝试过更改片段,但我也无法让它工作)。
目前,我正在从Async任务的onPostExecute方法调用新片段,该方法检查登录是否正常工作。这是我称之为交易的地方:
<html>
<head>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<link type="text/css" rel="stylesheet" href="//api.mapbox.com/mapbox.js/v2.3.0/mapbox.css" />
<script type="application/javascript" src="//api.mapbox.com/mapbox.js/v2.3.0/mapbox.js"></script>
<script type="application/javascript" src="//d3js.org/d3.v3.min.js"></script>
</head>
<body>
<div id="mapbox"></div>
</body>
</html>
这是我正在调用的第二个片段的XML文件:
@Override
protected void onPostExecute(Boolean result) {
if (result) { //If true, the server tasks were successful
getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_login_view, createFragment())
.commit();
}
}
我已尝试过更改此XML文件的一些内容,例如列出here和here的所有内容,以及可能几乎所有亚马逊提供的文档中列出的内容以及各种教程线上。
我也看了a question for replacing fragments in an Async task,但无济于事。我知道替换有点工作,从我上面发布的图片中可以看出,但它似乎永远不会占用整个屏幕。
地图片段类的onCreate和onCreateView如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent">
<fragment xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:amzn_mapType="amzn_normal"
tools:ignore="MissingPrefix"
class="com.amazon.geo.mapsv2.MapFragment" />
</RelativeLayout>
我花了几个小时搞乱这段代码并且无法让地图片段填满整个屏幕 - 同时仍然显示地图。我认为它必须与我的XML文件有关,因为我已经能够显示片段的一部分,而不是所有的片段都是正确的。我认为我正在进行正确的替换,并且因为我的Async任务是嵌套的,所以替换能够在那里工作得很好。
非常感谢任何帮助或指导!非常感谢你!
编辑
这是login_fragment XML:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isAmazonMapsAvailable()){ //this has always been true
Log.i(TAG, "Amazon maps is available!");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_map, container, false);
return v;
}
答案 0 :(得分:0)
我能解决这个问题!我做的是将我的登录片段和地图片段放在FrameLayouts中。只有在我做了这两件事之后才能让我的地图片段能够填满整个屏幕,而不仅仅是一部分。我不确定这是怎么可能的 - 但这是新的地图片段XML文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:amzn_mapType="amzn_satellite">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.amazon.geo.mapsv2.MapFragment" />
</FrameLayout>
上面的整个登录片段我只是封装在一个Frame Layout中,宽度和高度都是“match_parent”,它看起来效果很好!
我不知道为什么会这样。我知道它确实如此,如果有人知道为什么会这样,我会非常感谢对这个主题的一些启示!非常感谢!