2015-06-08 117 views
0

我得到以下除外圖:
java.lang.IllegalArgumentException異常:
未找到ID 0x7f04001a視圖(com.whatever:佈局/ fragment_main)
拋出:IllegalArgumentException:未找到ID

在外觀相似關於SO的問題:

一個答案建議使用getChildFragmentManager()而不是getSupportFragmentManager()。 這不是一個選項,因爲MainActivity不是Fragment

另一個答案表明,fragment_main不是activity_main的孩子,但我覺得我有activity_main.xml中安裝程序與tools:layout="@layout/fragment_main

另一個表明setContent()尚未被調用,但我有在onCreate()

我錯過了什麼?

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     // create fragment immediately 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     fragmentTransaction.add(R.layout.fragment_main, new MainActivityFragment()); 
     fragmentTransaction.commit(); 
     boolean wereThereWereAnyPendingTransactions = fragmentManager.executePendingTransactions(); 
    } 
} 

MainActivityFragment.java

public class MainActivityFragment extends Fragment implements Observer<String> { 
     public MainActivityFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.fragment_main, container, false); 
} 

activity_main.xml中

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/fragment" 
      android:name="com.whatever.MainActivityFragment" 
      tools:layout="@layout/fragment_main" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

fragment_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:id="@+id/fragment_main_table" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       tools:context=".MainActivityFragment"> 

    <TextView 
     android:text="@string/fragment_main_xml" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</RelativeLayout> 

相對於代碼的答案: actvity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/activity_frame_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      tools:context=".MainActivity" > 
</FrameLayout> 

MainActivity.java:

... 
    fragmentTransaction.add(R.id.activity_frame_layout, new MainActivityFragment()); 
    ... 

回答

1

如果嵌入一個FragmentActivity XML的佈局裏面,你不動態創建。系統爲你做。因此,不需要創建交易並將其提交,當您調用setContentView()時,將創建並添加Fragment

請注意,tools:layout=行在運行時不會執行任何操作。嚴格地說,這些工具可以更好地將佈局和組件連接在一起。

+0

我需要立即創建Fragment,因爲我然後要從RESTful服務加載數據。如果你想的話[詳情請看這裏](http://stackoverflow.com/questions/30464719/mactivity-from-fragment-onattach-not-retained)。 我該如何設置? –

+0

如果這樣靜態完成,「Fragment」已經爲您創建。您可以採用這種方法,但請記住,您將無法使用FragmentTransaction來替換或刪除它。如果您需要動態添加/刪除/替換「Fragment」,那麼您將適當地使用FragmentTransaction,並且您的activity_main.xml不會聲明「」,而是將「View」用作容器'Fragment',比如'FrameLayout'。 –

+0

我已將activity_main.xml更改爲FrameLayout,但錯誤仍然存​​在。我還需要做什麼? –

相關問題