Domanda

Ho provato a fare una navigazione tra frammenti.Ho il NewFragment.java con il nuovo frammento che funziona.Il mio problema è:

Come faccio a rendere questo onClickListener NewFragment.java correttamente?

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});
.

FYI: Questo è da dentro un frammento (non so se questo è importante).

È stato utile?

Soluzione

Aggiungi il seguente codice nella funzione Fare clic con il tasto funzione Listener,

NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
             .replace(R.id.Layout_container, nextFrag, "findThisFragment")
             .addToBackStack(null)
             .commit();
.

La stringa "findThisFragment" può essere utilizzata per trovare il frammento in seguito, se avete bisogno.

Altri suggerimenti

Questo è il codice più descritto del codice @ Narendra,

Per prima cosa hai bisogno di un'istanza del 2 ° frammento.Allora dovresti avere oggetti di frammentmanager e frammenttracrazione.Il codice completo è come di seguito,

Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
.

Spero che funzionerà.A volte puoi ottenere getospportfragmentmanager () invece di getfragmentmanager ().

È necessario creare una funzione all'interno dell'attività per aprire il nuovo frammento e passare il riferimento dell'attività al frammento e su qualche evento all'interno del frammento chiama questa funzione.

@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    UserResult nextFrag= new UserResult();
    this.getFragmentManager().beginTransaction()
    .replace(R.id.content_frame, nextFrag, null)
    .addToBackStack(null)
    .commit();  
}
.

Usa questo,

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
.

 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();
.

Solo per essere preciso, R.id.viewpagerId è cretaato nel layout di classe attuale, dopo aver chiamato, il nuovo frammento si infiltra automaticamente.

Aggiunta a @Narendra Soluzione ...

IMPORTANTE: quando si lavora con i frammenti, le navigazioni sono strettamente correlate all'attività ospite, quindi non è possibile saltare dal frammento al frammento senza implementare quella classe di frammento in attività host.

Esempio:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

Inoltre, controlla la tua attività host ha la prossima funzione di override:

@Override public void onFragmentInteraction(Uri uri) {} Spero che questo aiuti ...

Beh, il mio problema è stato che ho usato il codice dalla risposta, che viene controllato come soluzione qui, ma dopo che la sostituzione è stata eseguita, il primo strato era ancora visibile e funzionante sotto il frammento appena aperto.La mia soluzione era SIMMPLE, ho aggiunto

.remove(CourseListFragment.this)
.

Il CourselistFragment è un file di classe per il frammento che ho provato a chiudere. (Mainactity.java, ma per la sezione specifica (frammento del cassetto di navigazione), se ne ha più senso per te) Quindi il mio codice è così:

LecturesFragment nextFrag= new LecturesFragment();

                    getActivity().getSupportFragmentManager().beginTransaction()
                            .remove(CourseListFragment.this)
                            .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                            .addToBackStack(null)
                            .commit();
.

E funziona come un fascino per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top