2017-02-10 6 views
1

Попытка разместить два фрагмента внутри LinearLayout со следующим XML -Несколько фрагментов внутри LinearLayout

MainActivity:

<?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:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.frag.myfragmentapplication.MainActivity"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/mainTV" 
    android:text="Hello World!" /> 

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

    <fragment 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="30dp" 
     android:name="com.frag.myfragmentapplication.fragTwo" 
     tools:layout="@layout/fragment2" /> 
    <fragment 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="30dp" 
     android:name="com.frag.myfragmentapplication.fragOne" 
     tools:layout="@layout/fragment1" /> 
    </LinearLayout> 
</RelativeLayout> 

код MainActivity:

public class MainActivity extends AppCompatActivity { 

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

В то время как в области дизайна режим выглядит нормально, но когда я запускаю это приложение для тестирования, я получаю следующую ошибку:

java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.frag.myfragmentapplication/com.frag.myfragmentapplication.MainActivity}: android.view.InflateException: Binary XML файл строка # 24: Binary XML файл строки # 24: Ошибка раздувания фрагмента класса

Не уверен, что не так с кодом, помощь будет оценена.

+0

put weightsum = 2 для линейного макета –

ответ

1

При попытке отладки кода я получаю эту ошибку:

Caused by: java.lang.RuntimeException: [email protected] must implement OnFragmentInteractionListener

Теперь я удалил один из фрагментов и попытался его с той, которая до сих пор дал та же ошибка. Это означает, что проблема, которую вы имеете, не имеет ничего общего с несколькими фрагментами. Проблема в том, что вы создали файлы фрагмента.java, но не удалили неиспользуемые функции. Основная проблема, вызывающая проблему, заключается в том, что функция OnFragmentInterractionListener не реализована должным образом. Но вам это не нужно? Тааак

Если вы редактировать свои классы Java, как это только функция OnCreateView:

package *****; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class fragTwo extends Fragment { 

    public fragTwo() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_frag_two, container, false); 
    } 

} 

И

package *****; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 



public class fragOne extends Fragment { 

    public fragOne() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_frag_one, container, false); 
    } 

} 

Вы заметите, что проблема будет решена. Это работало на меня, и если у вас есть еще какие-то вопросы, я могу помочь.

И всегда помните, чтобы дать идентификационные значения вашим фрагментам в файле XML.

android:id="@+id/fragmentcontentarea1" 
android:id="@+id/fragmentcontentarea2" 

Удачи!

+0

Мои классы фрагментов включают ** только ** методы OnCreateView, у меня нет других функций.Если я удалю LinearLayout, окружающий fragmens, и установите ** android: layout_width = "match_parent" **, он отлично работает. –

+1

После добавления id в теги fragmen он работает как шарм. СПАСИБО –

+0

рад слышать, удачи :) – koksalb

0

Я бы предположил, что ваш фрагмент имеет другое имя, чем тот, который вы определяете в макете. Можете подтвердить, что у вас есть файл

com.frag.myfragmentapplication.fragTwo.java 

Обратите внимание, что важна капитализация.

+0

У меня есть эти классы. Если я удалю LinearLayout, это будет отлично. –

0

Продлить FragmentActivity вместо AppCompatActivity

public class MainActivity extends FragmentActivity{ 

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

Пробовал, все равно получаю ту же ошибку. –

Смежные вопросы