2016-03-22 14 views
0

İlk kez bir Android uygulaması geliştirmeye çalışıyorum. Yapmak istediğim şey oldukça basit görünüyor. NavigationView kullanarak bir menü istiyorum. Öğelerinden biri tıklandığında, ana düzende yeni bir parça "yük" olur.Android Fragmanı Yöneticinin çalışması, uygulamanın kapatılmasına neden oluyor

NavigationView öğesini başarıyla oluşturdum ve öğenin menüsünde tıklandığında bir parça görünmesini sağlayabiliyorum. Ama başka bir öğeye tıklamak istersem, uygulama durdu. İşte

benim (basitleştirilmiş) kodudur:

ana düzen ile bir xml dosyası: Belirli bir parçası görünmesini sağlamak istediğinizde

<FrameLayout 
    android:id="@+id/flContent" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Chabada"/> 

Ben Kimlik R.id.flContent kullanın.

public class ProfilFragment extends Fragment { 

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

Ve düzen (xml dosyası):

İşte
<?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"> 


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Catégories" 
     android:id="@+id/categories" 
     android:layout_gravity="center" /> 
</LinearLayout> 

bir benim ana faaliyet java başlangıcı

benim parçanın her İçin

, ben böyle bir Java sınıf var Sınıfı:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    ProfilFragment categorie = new ProfilFragment(); 
    // And the other fragments 

    /** more code, functions... **/ 
    public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camera) { 

     fragmentTransaction.replace(R.id.flContent,profil); 
     fragmentTransaction.commit(); 
    } else if (id == R.id.nav_gallery) { 

     fragmentTransaction.replace(R.id.flContent,liste); 
     fragmentTransaction.commit(); 
    } 
    // simplified here again, but it's the same code for every of my fragments 

Neyi özledim?

Bunu oluşturmak için android developer guide ve onun doc verilerini kullandım. SO üzerinde answered questions danışmaya çalıştım ama sorunumla eşleşmiyor gibi görünüyor.

Düzenleme 1:

hatası:

FATAL EXCEPTION: main 
Process: com.example.arhyaa.youcook, PID: 32577 
java.lang.IllegalStateException: commit already called 
    at android.app.BackStackRecord.commitInternal(BackStackRecord.java:713) 
    at android.app.BackStackRecord.commit(BackStackRecord.java:704) 
    at com.example.arhyaa.youcook.MainActivity.onNavigationItemSelected(MainActivity.java:103) 
    at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:151) 
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 
    at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 
    at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:318) 
    at android.view.View.performClick(View.java:4756) 
    at android.view.View$PerformClick.run(View.java:19761) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5253) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695) 
+0

hata günlüğü ekleyin .. –

cevap

3

kodunuzu şeyi göstermez, ama hatadan ben iki kere değişiklikleri işlemek için aynı işlem kullandığınızı tahmin edebilirsiniz

bu satırda, onNavigationItemSelected yöntemi içinde olmalıdır

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

Yeni bir işlem oluşturmanız gerektiğinde, parçayı değiştirmek istediğinizde, eski bir tane zaten işlemiş olduğunuz için zaten

+0

Çok teşekkürler! Anladım() dan geldiğini anladım ama bunun olduğunu hayal etmemiştim. Garrus Vakarian, her zaman ihtiyaç duyduğu her zaman :-) – Arhyaa

+0

lol, rica ederim –

İlgili konular