2016-03-13 76 views
0

我遇到了一個問題,雖然我一直在嘗試使用replace方法來替換一個片段以使用另一個地圖片段登錄到服務器,但會發生以下情況:新片段(應該是亞馬遜地圖片段)only takes half of the screen。一旦用戶點擊登錄按鈕,它應該變成新的片段(並且我試圖改變那裏的片段,但是我還沒有能夠讓它工作)。亞馬遜地圖片段替換

目前,我從異步任務的onPostExecute方法調用新片段,檢查登錄是否正常工作。這裏就是我所說的交易:

@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文件:

<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文件,例如因爲列出的所有內容herehere,以及Amazon提供的文檔中列出的幾乎所有內容以及各種在線教程。

我也看過a question for replacing fragments in an Async task,但無濟於事。我知道替換工作在某種程度上是有效的,從我上面張貼的圖片可以看出,但似乎從未佔用整個屏幕。

我的onCreate和onCreateView的地圖片段類是如下:

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; 
} 

我已經花了幾個小時,此代碼亂搞,也沒有能夠得到地圖碎片填滿整個屏幕 - 同時仍然顯示地圖。我認爲它必須與我的XML文件有關,因爲我已經能夠將它的部分片段顯示出來,但並不是所有的片段都是正確的。我認爲我正在進行替換,並且由於我的異步任務是嵌套的,替換能夠在那裏工作得很好。

任何幫助或指導將不勝感激!非常感謝!

編輯

這裏的login_fragment XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/fragment_login_view" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent"> 

     <TextView 
      android:id="@+id/userNameHint" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/user_name" 
      android:paddingTop="25dp" 
      android:paddingBottom="25dp" 
      android:paddingStart="24dp" 
      android:paddingEnd="24dp"/> 

     <TextView 
      android:id="@+id/passwordHint" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/password" 
      android:paddingTop="24dp" 
      android:paddingBottom="25dp" 
      android:paddingStart="24dp" 
      android:paddingEnd="24dp"/> 

     <TextView 
      android:id="@+id/serverHostHint" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/server_host" 
      android:paddingTop="24dp" 
      android:paddingBottom="25dp" 
      android:paddingStart="24dp" 
      android:paddingEnd="24dp"/> 

     <TextView 
      android:id="@+id/serverPortHint" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/server_port" 
      android:paddingTop="24dp" 
      android:paddingBottom="25dp" 
      android:paddingStart="24dp" 
      android:paddingEnd="24dp"/> 

    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/userNameEntry" 
      android:layout_width="150dp" 
      android:layout_height="match_parent" 
      android:inputType="text" 
      android:paddingBottom="22dp"/> 

     <EditText 
      android:id="@+id/passwordEntry" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:ems="10" 
      android:paddingTop="22dp" 
      android:paddingBottom="22dp" 
      android:allowUndo="true"/> 

     <EditText 
      android:id="@+id/serverHostEntry" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:inputType="text" 
      android:paddingTop="22dp" 
      android:paddingBottom="22dp"/> 

     <EditText 
      android:id="@+id/serverPortEntry" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:inputType="text" 
      android:paddingTop="22dp" 
      android:paddingBottom="22dp"/> 

    </LinearLayout> 

    <Button 
     android:id="@+id/signInButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/sign_in" 
     android:layout_gravity="center_vertical" /> 

</LinearLayout> 
+0

R.id.fragment_login_view是什麼樣的XML? 同樣在你的用於Map Map的XML中,RelativeLayout很可能是多餘的,可以刪除。 – Darwind

+0

@Darwind我在XML文件中添加了登錄片段。儘管你對RelativeLayout是正確的。我不知道爲什麼我在那裏。我從代碼中刪除它並重新啓動它,但我仍然遇到同樣的問題。 –

回答

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> 

整個登錄片段回事以上我只是封裝的幀結構的內部,寬度和高度爲「match_parent」,它似乎工作得很好!

我不知道爲什麼這個工程。我只知道它確實如此,如果有人知道爲什麼會出現這種情況,我將不勝感激對這個話題的啓發!非常感謝!