Autore Topic: problema navigation drawer  (Letto 615 volte)

Offline marc

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    bq acquaris m5
  • Sistema operativo:
    ubuntu, mac Os
problema navigation drawer
« il: 19 Marzo 2016, 16:45:55 CET »
0
ciao ragazzi, in pratica il mio problema è il seguente: ho un navigation drawer nella mia app, si avvia tutto tranquillamente e quando premo nelle icona si aprono i fragment associati ai tasti,ma il problema è che quando apro un fragment diverso dal activity_main mi appaiono gli inserimenti(button text, ecc) che ho aggiunto nel activity_main, cioè è come se non venisse chiuso l'activity_main e mi mostra negli altri fragment il suo contenuto.


il codice è il seguente:

MAIN:

Codice (Java): [Seleziona]
package com.example.maaajjjj.toctoccosenza;

import android.annotation.SuppressLint;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.Fragment;
import android.widget.Button;
import android.content.Intent;
import android.widget.EditText;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import database.DataBaseManager;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, FragmentCamera.OnFragmentInteractionListener,
        FragmentGaleria.OnFragmentInteractionListener,FragmentEmail.OnFragmentInteractionListener {


    private DataBaseManager manager;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);




        manager=new DataBaseManager(this);


        manager.inserisci("Marcos", "3314055163");
        manager.inserisci("Antonio", "3326425643");

        manager.inserisci("gildas", "331555555555163");









        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);
    }

    @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();

        boolean FragmentTransaction = false;
        Fragment fragment = null;


        if (id == R.id.nav_camara) {
            fragment = new FragmentCamera();
            FragmentTransaction = true;
        } else if (id == R.id.nav_gallery) {
            fragment = new FragmentGaleria();
            FragmentTransaction = true;
        } else if (id == R.id.nav_slideshow) {
            fragment = new FragmentEmail();
            FragmentTransaction = true;
        } else if (id == R.id.nav_manage) {


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

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


        }*/


        if(FragmentTransaction) {
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.content_main, fragment)
                    .commit();
         

            item.setChecked(true);
            getSupportActionBar().setTitle(item.getTitle());
        }


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }
}

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:problema navigation drawer
« Risposta #1 il: 19 Marzo 2016, 18:28:20 CET »
0
Ciao,
Codice (Java): [Seleziona]
getSupportFragmentManager().beginTransaction().replace(R.id.content_main, fragment).commit();
Il codice riportato sopra, prende il fragment appena istanziato es:
Codice (Java): [Seleziona]
 fragment = new FragmentEmail(); e lo inserisce l posto di content_main, assicurati che ogni Fragment nel onCreateView abbiano un inflater.inflate(R.layout.FRAGMENT_LAYOUT, ... e non usino il layout della MainActivity (activity_main)

Saluti.

Offline marc

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    bq acquaris m5
  • Sistema operativo:
    ubuntu, mac Os
Re:problema navigation drawer
« Risposta #2 il: 19 Marzo 2016, 19:34:32 CET »
0
perdonami ma non ho un metodo onCreateView, potresti essere piu esplicito?... scusami sono le prime volte che programmo in android, sicuramente è una cosa banale.

mi puoi dare una dritta piu specifica?
per quello che mi dici mi viene di metterlo qui:
Codice (Java): [Seleziona]
if (id == R.id.nav_camara) {
            fragment = new FragmentCamera();
            FragmentTransaction = true;
            Inflater.inflater(R.layout.fragment_camara);

è giusto??

grazie tante
« Ultima modifica: 19 Marzo 2016, 19:42:55 CET da marc »

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:problema navigation drawer
« Risposta #3 il: 21 Marzo 2016, 08:28:46 CET »
0
Ciao,

da quello che ho capito, quando apri un fragment tappando sulla sua rispettiva voce di menù non vedi il layout corrispondente al fragment.

Ogni fragment ha un metodo onCreateView , all'interno di questo metodo devi assicurarti che il fragment usi il suo layout, e non quello della "MainActivity". Se usi Android Studio, ti consigli di creare un nuovo fragment e di vedere come è strutturato.


Saluti

Offline marc

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    bq acquaris m5
  • Sistema operativo:
    ubuntu, mac Os
Re:problema navigation drawer
« Risposta #4 il: 21 Marzo 2016, 08:33:07 CET »
0
no, non è cosi, quando tappo il fragment vedo quel fragment e contemporaneamente quello del main, questo è il problema

grazie

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:problema navigation drawer
« Risposta #5 il: 21 Marzo 2016, 08:42:37 CET »
0
Ciao,

Scusa, ho capito male allora. Personalmente quando uso il NavDrawer ed i fragment, la MainActivity la uso solo come contenitore dei fragment. Quindi la mia MainActivity non ha layout, perchè c'è un "MainFragment" che viene inserito subito come default di partenza. Ti consiglio di usare un aproccio simile a quello appena descritto, ovvero usa tutti fragment anche la Main. L'activity container quindi, deve solo avere una view che verrà sostituita con l'istanza del fragment.

Saluti.

PS: Puoi usare come esempio quello che ti viene automaticamente generato da AndroidStudio se crei un progetto partendo dal template NavigationDrawer.

Offline marc

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    bq acquaris m5
  • Sistema operativo:
    ubuntu, mac Os
Re:problema navigation drawer
« Risposta #6 il: 21 Marzo 2016, 09:03:16 CET »
0
infatti ho creato un nuevo fragment, e ce il metodo onCreateView(scusami non lo avevo visto), ed effetivamente chiama al suo layaout
Codice (Java): [Seleziona]
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_fragment_camera, container, false);
    }
« Ultima modifica: 21 Marzo 2016, 09:05:33 CET da marc »