2016-08-17 4 views
-1

Я новичок в android. Я хочу заменить фрагмент кодом. Вот мой код. MainActivity:Ошибка раздувания фрагмента класса при замене фрагмента

public class MainActivity extends FragmentActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    setDefaultFragement(); 
} 
private void setDefaultFragement() { 
    ContentFragment fragment = new ContentFragment(); 
    FragmentManager manager = getSupportFragmentManager(); 
    manager.beginTransaction().replace(R.id.fra_content,fragment).commit(); 
} 
} 

Вот мой ContentFragment

public class ContentFragment extends Fragment { 

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

mylayout:

<fragment 
    android:id="@+id/fra_content" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@id/fra_title" 
    /> 

Однако я получил эти ошибки

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.administrator.myapplication/com.example.administrator.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragmet 

ответ

0

Вместо того, чтобы использовать "фрагмент" в вашем xml, используйте FrameLayout. Если вы хотите использовать фрагмент в своем xml, он должен быть указан, поэтому ему не нужен менеджер фрагментов.

Таким образом, в вашем XML

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/toolbar" 
    android:id="@+id/content"/> 

В вашей деятельности:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.setCustomAnimations(enterAnimation, exitAnimation); 
ft.replace(R.id.content, new ContentFragment()); 
ft.commit(); 

И в вашем фрагменте:

public class ContentFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_content, container, false); 
    return rootView; 
} 
} 
+0

Большое вам спасибо. Я изменил свой код, и он работает. –

0

Замените setDefaultFragement Функция

private void setDefaultFragement() { 
     ContentFragment fragment = new ContentFragment(); 
     FragmentManager manager = getSupportFragmentManager(); 
     manager.beginTransaction().replace(android.R.id.content,fragment).commit(); 
    } 
+0

Я не вижу разницы. –

+0

заменить (android.R.id.content, фрагмент) –

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