2012-11-19 5 views
18

Kullanıcı tarafından oluşturulan öğelerin listesini gösteren bir ListFragment sahibim. "@android: id/list" olarak ayarlanmış bir ListView ve "@android: id/empty" kimliğine sahip bir TextView var.FragmentTransaction.replace() çalışmıyor

Kullanıcının listeye daha fazla girdi oluşturmasını sağlamak için bir parçayı görüntülemek için bir işlem çubuğu düğmesine sahibim. İşte onOptionsItemSelected() yöntemdir şu şekildedir:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Fragment frag = null; 

    // Right now I only have code for the addCourse() fragment, will add more soon 
    switch (item.getItemId()) { 
    case R.id.addCourse: 
     frag = new AddCourseFragment(); 
     break; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 

    // The support library is being dumb and replace isn't actually 
    getFragmentManager().beginTransaction() 
     .remove(this).add(getId(), frag).addToBackStack(null).commit(); 
    return true; 

} 

AddCourseFragment kodudur: Liste doldurulmamış olduğunda

Beklendiği gibi
public class AddCourseFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_addcourse, container, false); 
//  if (view.findViewById(R.id.timesFrame)!=null) { 
     Fragment timesFrag = new TimesFragment(); 
     getChildFragmentManager().beginTransaction() 
      .add(R.id.timesFrame, timesFrag).commit(); 
//  } 
    return view; 
    } 
} 

, android TextView metni gösterir. Sonra kurs ekle düğmesine bastığımda bu olur: enter image description here
Yeni metni olduğu kadar boş metni de gösterir.

cevap

20

Benzer bir sorunla karşılaştım.

this programına göre, Fragments programlı eklenmesi gerektiğinde, bunları ViewGroup numaralı telefona eklemeniz gerekir.

Bu nedenle, Fragment'u xml'den kaldırdım ve bileşenini replace() yönteminde kullandım.

Ayrıca here'a da bakabilirsiniz.

Bu yardımcı olur umarım.

2

Sorunu çözdüğüm başka bir sorun da benim durumumda farklı API ithalatıydı.

API 11'in "support.v4" veya "orjinal" uygulamalarını kullandığınızdan ve karıştırmayın. (Bu benim durumumda, olabilir: TransactionManager v4 ve Etkinlik eski bir sürümü veya tersi)

0

Başka bir çözüm yerine parçanın bu

gibi

<Fragment 
     android:name="path/to.package.MyClass" 
     android:id="@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="100dp" 
     /> 

KULLANIMINI onu LinearLayout kullanmaktır

<LinearLayout 
     android:name="path/to.package.MyClass" 
     android:id="@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="100dp" 
     /> 
3

ChildFragment'in ana düzenine arka plan rengi verin. android gibi

: Arka plan = "# FFFFFF" Bu benim için çalıştı

!!!!

0

LinearLayout için RelativeLayout değiştirmeyi çözdüm ... Umarım yardımcı olur!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/windowBackground"> 


    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


</LinearLayout>