İ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)
hata günlüğü ekleyin .. –