J'ai créé une barre d'outils de navigation latérale, dans laquelle j'ai 4 fragments (Fragment A, B, C, D). Je veux que chaque fois que l'utilisateur appuie sur le bouton Retour dans n'importe quel fragment A, B, C, D. L'utilisateur reviendra à MainActivity (HomeScreen).

MainActivity.java -

package com.thechamp.ait;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.accessibility.AccessibilityRecord;
import android.widget.Toast;

import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import com.google.android.material.navigation.NavigationView;

import java.security.MessageDigest;
import java.util.Calendar;


public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(null);
        getSupportActionBar().setElevation(0);

        navigationView = findViewById(R.id.nav_view);
        navigationView.setItemIconTintList(null);

        Calendar c = Calendar.getInstance();
        int timeOfDay = c.get(Calendar.HOUR_OF_DAY);

        if(timeOfDay >= 0 && timeOfDay < 12){
            Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show();
        }else if(timeOfDay >= 12 && timeOfDay < 16){
            Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show();
        }else if(timeOfDay >= 16 && timeOfDay < 21){
            Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show();
        }else if(timeOfDay >= 21 && timeOfDay < 24){
            Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show();
        }




        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView.setNavigationItemSelectedListener(this);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();


    }



    @Override
    public boolean onNavigationItemSelected( MenuItem item) {
        switch (item.getItemId()) {
            case    R.id.nav_about:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutCollege()).commit();
                break;

            case    R.id.nav_Earnmoney:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new EarnMoney()).commit();
                break;

            case    R.id.nav_Feedback:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Feedback()).commit();
                break;
            case    R.id.nav_notice:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NoticeBoard()).commit();
                break;
            case    R.id.nav_study:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StudyMaterial()).commit();
                break;
            case    R.id.nav_support:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Support()).commit();
                break;
        }
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }



    @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        }
        else {
        super.onBackPressed();
    }
}}

Voici maintenant le fragment D (feedback.java)

package com.thechamp.ait;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class Feedback extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_feedback, container, false);


        ((AppCompatActivity) getActivity()).getSupportActionBar().hide();
       





           return view;
    }
}
0
Buddy 16 oct. 2020 à 21:38

3 réponses

Meilleure réponse

Utiliser ce code dans chaque fragment

@Override
public void onResume() {
    super.onResume();
    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
              Intent intent = new Intent(getActivity(),MainActivity.class);
  startActivity(intent);
    getActivity().getFragmentManager().popBackStack();

                return true;
            }
            return false;
        }
    });

}
 
1
Taha Gorme 17 oct. 2020 à 05:27

Si vous souhaitez revenir à MainActivity on Back, cliquez sur le fragment de procédure pas à pas, puis pendant la validation de votre fragment, ajoutez-le à BackStack en utilisant cette méthode:

FragmentTransaction addToBackStack (String name)

Cette méthode effectuera l'opération ci-dessous:

Ajoutera cette transaction à la pile arrière. Cela signifie que la transaction sera mémorisée après sa validation et inversera son opération lorsqu'elle sera ensuite retirée de la pile.

Tu peux l'utiliser comme ça

FragmentTransaction transaction = getFragmentManager().beginTransaction();
ftx.replace(R.id.my_container_frame, fragment);
ftx.addToBackStack(null);
ftx.commit();
2
KpStar 16 oct. 2020 à 18:42

Je n'ai pas bien compris la question mais vous pouvez essayer de remplacer la méthode onBackPressed ().

@Override
public void onBackPressed() {
    super.onBackPressed();
}

Vous pouvez ajouter une intention d'accéder à l'écran d'accueil dans cette méthode.

1
Dharman 17 oct. 2020 à 04:32