2015-09-08 3 views
0

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

FragmentActivity.java:

package com.example.pc.learn_again; 

import android.app.Activity; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.os.PersistableBundle; 

public class FragmentActivity2 extends Activity{ 
@Override 
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 
    super.onCreate(savedInstanceState, persistentState); 
    setContentView(R.layout.mainfragment2); 

    //adding the fragment using Java code---dynamically ya3ni// 
    //create an object of the intended frag// 
    Fragment3 frag = new Fragment3(); 
    //get the manager 
    FragmentManager manager = getFragmentManager(); 
    //start the transaction 
    FragmentTransaction transaction = manager.beginTransaction(); 
    //add to the layout 
    transaction.add(R.id.mylayout,frag,"fragment3");//--note: the parameters used are 1- the id of the main layout 2- the intended fragment 3- a key for future use// 
    //finish using the below 
    transaction.commit(); 
} 
} 

Fragment3.java:

package com.example.pc.learn_again; 


import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragment3 extends Fragment { 

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

fragment3.xml:

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

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/textView3" 
    android:layout_gravity="center_horizontal" 
    android:layout_margin="40dp"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/button12" 
    android:layout_below="@+id/textView3" 
    android:layout_margin="40dp" 
    android:layout_gravity="center_horizontal" /> 
</RelativeLayout> 

mainfragment2.xml:

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

</LinearLayout> 

я проверил все выше и связи между XML-файлов и классов и все правильно, хотя, когда я проверить его фрагмент не показывает в своей деятельности

+0

проверено это? http://stackoverflow.com/questions/18296868/how-to-add-a-fragment-to-a-programmatically-generated-layout –

+0

Некоторые вещи, которые я вижу, без проверки вашего кода: - попробуйте импортировать android.support.v4. * классы для вашего FragmentManager, FragmentTransaction и Fragment - попробуйте изменить свою активность, чтобы расширить FragmentActivity - используйте другой метод onCreate() - тот, у кого нет PersistentState –

ответ

0

Попробуйте это:

mainfragment2.xml: 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/mylayout" 
    </LinearLayout> 
</LinearLayout> 
0

Я думаю, что проблема может быть, что вы используете неправильный OnCreate(), так что ваш код вида деятельности никогда не работает.

onCreate(Bundle) - стандартный метод, который всегда вызывается, когда создается действие. onCreate(Bundle, PersistableBundle) вызывается только в том случае, если вы правильно установили тег persistableMode.

+0

, только что заметил это вчера, thx man :) –

0

Создать FrameLayout внутри LinearLayout в mainfragment2.xml первый:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/mylayout"> 

    <FrameLayout android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/container" /> 

</LinearLayout> 

Затем поместите Fragment3 в эту FrameLayout использованием replace() метода:

getFragmentManager().beginTransaction() 
     .replace(R.id.container, new Fragment3).commit(); 

С Fragment был добавлен в уровне API 11, вы можете использовать getSupportFragmentManager(), который предоставил библиотеку поддержки для предустановленных устройств сотовой связи Fragment.

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