2015-10-03 24 views
1

我正在嘗試創建一個將動態加載不同碎片的活動。 這是我的主要活動是如何模樣動態碎片中的運行時異常

import android.os.Bundle; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
    public class User_details extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fragment_loader); 
     Fragment fragment=new mail_fragment(); 
     FragmentTransaction fragmentTransaction = 
       getFragmentManager().beginTransaction(); 
      fragmentTransaction.add(R.id.fragment_place, fragment); 
      fragmentTransaction.commit(); 

} 

在運行時,我收到以下錯誤。請檢查錯誤here

片段這個樣子的

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
    public class mail_fragment extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_mail, container, false); 
}} 

主要活動(User_details)的XML文件是Activity_Fragment_loader

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Ask me Later" 
    android:id="@+id/but_skip" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" /> 
<fragment 
    android:id="@+id/fragment_place" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@+id/but_skip" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 
    </RelativeLayout> 

mail_fragment活動的XML文件是

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="Enter your E-mail ID" 
    android:id="@+id/mail" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="119dp" 
    android:textColor="#000000" 
    android:layout_gravity="center_horizontal|top" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textEmailAddress" 
    android:ems="10" 
    android:id="@+id/editText" 
    android:layout_centerVertical="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_gravity="center" /> 
</FrameLayout> 

我已經提到了類似的問題。他們大多數建議我在提交fragmenttracsaction後將setContentView()放置在User_details活動中。我試過,但我仍然得到相同的錯誤。

我還想補充一點,我靜態地將片段嵌入到XML文件中,並且工作完美。現在,當我這樣務實地向我拋出這個錯誤。

任何幫助將不勝感激

回答

0

我通過以下更改解決了問題。我發現問題是由於在User_details.XML中使用的。

我改變了一套代碼到這個

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="466dp" 
    android:layout_gravity="center_horizontal|top" 
    android:id="@+id/fragment_place"></FrameLayout> 

此之前看起來像

<fragment 
android:id="@+id/fragment_place" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_above="@+id/but_skip" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" /> 

閱讀fragments官方文檔後,我發現我需要有一個佈局動態變化片段而不是 這解決了這個問題,現在我可以在按鈕之間切換片段單擊。

0

的FragmentTransaction.add方法使用的ViewGroup的id到要添加的片段,而不是片段的ID。 你有兩個交替,要麼指定XML片段的name屬性一樣

<fragment 
android:name="your_package_name.mail_fragment" 
android:id="@+id/fragment_place" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_above="@+id/but_skip" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" /> 

,然後在Java中,而不是調用

Fragment fragment = new mail_fragment(); 

使用

Fragment fragment = (Fragment)findViewById(R.id.fragment_place); 

和其餘爲通常。

另一種替代方法是不要將片段添加到Activity的XML中,而是使用Java創建。在這種情況下,您必須在FragmentTransaction.add()方法中指定ViewGroup ID。 希望這有助於。

+0

正如我在我的問題的最後幾行所說的,我已經嘗試靜態添加一個片段,將它包含在XML文件中,就像您建議的那樣。當我嘗試加載另一個片段時,它只是位於它的頂部而不是替換它(我使用了fragmenttransaction.replace())。我無法理解viewGroup ID的含義。你能給我一個例子 –

+0

在你的情況下,你必須分配一個ID給相關佈局,並在FragmentTransaction.add()方法中使用這個ID。這會將碎片添加到相對佈局,這正是您的願望。你在做什麼是嘗試並添加一個片段到另一個片段。 –