0

J'ai une activité de tiroir de navigation avec des fragments à l'intérieur en utilisant un conteneur de fragments. J'ai trois fragments à l'intérieur et j'ai besoin de l'un d'eux nommé locate_login pour ne pas contenir mon tiroir de navigation.Comment implémenter setDrawerLockMode ou désactiver le tiroir de navigation

MainActivity.java

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); //nav drawer 

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

     //Set the fragment initially 
     locate_login fragment = new locate_login(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

    } 

    public void onSelectFragment(View v){ //ignore this 
     Fragment newFragment; 

     if(v == findViewById(R.id.trigger)){ 
      newFragment = new locate_after(); 
     } 
     else{ 
      newFragment = new locate_before(); 
     } 

     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 


    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     drawer.closeDrawer(GravityCompat.START); 
     return true; 

} 

} 

Voici mon fragment locate_login

public class locate_login extends Fragment{ 

    public locate_login() { 
     // Required empty public constructor 

    } 

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

    } 

} 

Je fortement apprécier si la réponse sera détaillée depuis que je suis un débutant sur Android studio .

Répondre

0

Créez une classe pour un paramètre constant. Déclarer une variable constante comme:

Disons StringConstant.java:

public static final int LOCK_DRAWER = 1; 
public static final int SHOW_DRAWER = 2; 

Lorsque vous naviguez dans le tiroir, utilisez un objet Intent comme:

Si vous voulez afficher le tiroir, utilisez:

intent.putExtra("SHOW_DRAWER", StringConstant.SHOW_DRAWER); 

OU

Si vous ne voulez pas montrer le tiroir, utilisez:

intent.putExtra("SHOW_DRAWER", StringConstant.LOCK_DRAWER); 

Extrayez l'intention de votre fragment classe, vous dites locate_login.

int status = getActivity.getIntent().getIntExtra("SHOW_DRAWER", 0); 

Vérifier l'état:

if (status == String.Constant.LOCK_DRAWER){ 
    lockDrawer(); 
} 

public void lockDrawer() { 
    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
} 

Pour déverrouiller le tiroir:

public void unlockDrawer() { 
    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
}