incapace di sostituire / navigare frammenti

Sto cercando di navigare da un frammento all'altro. Questi 2 frammenti sono 100% diversi, non c'è nessun ViewPager o qualcosa del genere per collegarli. Ecco il codice.

fragment_view1.xml

  • Come rendere l'effetto di incandescenza intorno a una bitmap?
  • Errore di BM-PPH-01 di Google Play Alpha App
  • java.lang.IllegalStateException: frammento non associato all'attività
  • Come get un ListView non scrollabile?
  • Spostamento dell'azione Azione galleggiante su e giù per evitare di essere bloccato da uno snackbar
  • Posso ricevere messaggi GCM da due o più GCM SENDER_ID nella mia app?
  •   <?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:orientation="vertical" android:id="@+id/firstView"> <TextView android:id="@+id/viewOneText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="92dp" android:layout_marginTop="182dp" android:text="First View" android:textAppearance="?android:attr/textAppearanceLarge" /> <Button android:id="@+id/viewOneBtn" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/viewOneText" android:layout_below="@+id/viewOneText" android:layout_marginTop="17dp" android:text="Click Here" /> <include layout = "@layout/drop_down" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_alignParentBottom="true"/> <FrameLayout android:id="@+id/fragment_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> 

    custom_view.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:orientation="vertical" android:id="@+id/customFragment" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="174dp" android:text="Custom Fragment" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout> 

    FirstView.java (utilizza fragment_view1.xml)

      package com.example.fragmenttest; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; public class FirstView extends DropDownMenu { private TextView firstText; private Button btn; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_view1,container,false); firstText = (TextView)view.findViewById(R.id.viewOneText); btn = (Button)view.findViewById(R.id.viewOneBtn); btn.setOnClickListener(new ButtonEvent()); return view; } private class ButtonEvent implements OnClickListener { @Override public void onClick(View v) { // Create new fragment and transaction Fragment newFragment = new CustomView(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.fragment_view, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); } } } 

    CustomView.java (usa custom_view.xml)

     package com.example.fragmenttest; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; public class CustomView extends Fragment { private TextView secondText; private Button secondViewBtn; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.custom_view,container,false); return view; } } 

    In FirstView.java , quando faccio clic sul button, devo passare alla Fragment CustomView . Ma invece si muove, sostituisce semplicemente tutto in CustomView in cima a FirstView . Sotto le immagini lo spiegherà meglio.

    FirstView da solo

    immettere qui la descrizione dell'immagine

    Solo CustomView

    immettere qui la descrizione dell'immagine

    Quando il button è FirstView cliccato

    immettere qui la descrizione dell'immagine

    Perché succede così? Per favore aiuto

  • Android: Come posso get il nome dell'applicazione corrente aperta sullo schermo
  • Posso fare clic su un button in modo programmato per un intento predefinito?
  • Ricerca rapida sul nome del file Android studio
  • HttpDelete con il corpo
  • Retrofit (2.0 beta2) Il caricamento di file multipart non funziona
  • Esiste un'azione di trasmissione per le modifiche del volume?
  • 2 Solutions collect form web for “incapace di sostituire / navigare frammenti”

    Stai cercando di sostituire il firstView con il nuovo frammento, ma firstView non è un frammento, è un RelativeLayout .

    Non è ansible sostituire un frammento definito staticamente nel file di layout. È ansible sostituire solo i frammenti aggiunti dynamicmente tramite una FragmentTransaction .

    Nessuno dei tuoi layout contiene frammenti nel layout.

     <fragment android:id="@+id/fragment1" android:layout_width="march_parent" android:layout_height="match_parent"></fragment> 

    Un nuovo frammento sostituirà un frammento esistente precedentemente aggiunto al contenitore.

    Prendi un'occhiata a questo .

    Se è necessario sostituire un frammento con un altro, poi descrivere:

     TalkDetail fragment = new TalkDetail(); // TalkDetail is name of fragment which you need to put while replacing older one. Bundle bundle = new Bundle(); bundle.putString("title", m_ArrayList.get(arg2).title); bundle.putString("largeimg", m_ArrayList.get(arg2).largeimg); bundle.putString("excert", m_ArrayList.get(arg2).excert); bundle.putString("description", m_ArrayList.get(arg2).description); bundle.putString("cat", m_ArrayList.get(arg2).cat); bundle.putString("header_title", "Talk"); //bundle.putInt("postid", m_ArrayList.get(arg2).postid); fragment.setArguments(bundle); ((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true); 

    Ecco la tua class BaseContainerFragment.java che gestirà molte cose per te.

     import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; import app.drugs.talksooner.R; public class BaseContainerFragment extends Fragment { public void replaceFragment(Fragment fragment, boolean addToBackStack) { FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); if (addToBackStack) { transaction.addToBackStack(null); } transaction.replace(R.id.container_framelayout, fragment); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } public boolean popFragment() { Log.e("test", "pop fragment: " + getChildFragmentManager().getBackStackEntryCount()); boolean isPop = false; if (getChildFragmentManager().getBackStackEntryCount() > 0) { isPop = true; getChildFragmentManager().popBackStack(); } return isPop; } } 

    Per ulteriori dettagli trova il mio post completo qui.

    Cambiare dynamicmente i frammenti all'interno di un host scheda frammento?

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.