Autore Topic: sliding menu con navigation drawer  (Letto 496 volte)

Offline namelessg

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
sliding menu con navigation drawer
« il: 16 Luglio 2015, 21:45:19 CEST »
0
Buon sera
non ho capito una cosa:
se io creo lo sliding menu e gestisco il passaggio ad un fragment in questo modo:
Codice: [Seleziona]
private void selectItem(int position) {


       Fragment fragment;
       FragmentManager fragmentManager = getFragmentManager();
       switch(position) {
           default:

           case 0:
               fragment = new Home();
               break;
           case 1:
               fragment = new frag1);
               break;
           case 2:
               fragment = new frag2();
               break;
     
        }
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, fragment)
                .commit();

nel momento in cui clicco su una posizione del menu, viene creato il nuovo fragment che sostituirà il vecchio,
il vecchio fragment che fine fa? resta in memoria?
perchè l'app è un po lenta, nel caso resta in memoria come posso rimuovere il vecchio fragment


Offline CrotaNexus

  • Utente normale
  • ***
  • Post: 156
  • Vuolsi così colà dove si puote ciò che si vuole
  • Respect: +25
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    SimoneDev
  • Sistema operativo:
    Windows 8.1
Re:sliding menu con navigation drawer
« Risposta #1 il: 17 Luglio 2015, 12:15:30 CEST »
0
Con il metodo replace() viene rimosso il Fragment che è "attaccato" al container e viene sostituito con il nuovo che passi come argomento. Come specificato anche nella documentazione ufficiale il metodo replace fa la stessa cosa che altrimenti dovresti fare con più metodi: remove e poi add.

Inviato dal mio Nexus 5 con Tapatalk 2
SimoneDev @ Google Play Store

Offline namelessg

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
Re:sliding menu con navigation drawer
« Risposta #2 il: 19 Luglio 2015, 11:02:20 CEST »
0
allora non capisco perchè il caricamento di un nuovo fragment è molto lento  :-(

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:sliding menu con navigation drawer
« Risposta #3 il: 19 Luglio 2015, 14:10:29 CEST »
0
nel nuovo fragment cosa succede ?

Offline namelessg

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
Re:sliding menu con navigation drawer
« Risposta #4 il: 19 Luglio 2015, 14:15:19 CEST »
0
prima che si carica il nuovo fragment ci mette un po di tempo
inoltre mi dava un errore di allocazione in memoria che ho risolto settando    android:largeHeap="true"
perciò avevo dubbi che con replace il fragment creato precedentemente venisse rimosso dalla memoria

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:sliding menu con navigation drawer
« Risposta #5 il: 19 Luglio 2015, 14:21:49 CEST »
0
posta l'intero main , mi pare assurdo che vada addirittura in out memory  :-o fai popolamento di grandi bitmap o altro ? io uso tanto il replace del fragment ed è istantaneo , mi viene da pensare che venga stanziato più volte

Offline namelessg

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Mostra profilo
Re:sliding menu con navigation drawer
« Risposta #6 il: 19 Luglio 2015, 14:33:20 CEST »
0
Codice: [Seleziona]
public class MainActivity extends Activity{
    private DrawerLayout mDrawerLayout;
    private RelativeLayout mDrawerRelativeLayout;
    private ListView listView;

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

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);


        mDrawerRelativeLayout=(RelativeLayout)findViewById(R.id.left_drawer);



//popolamento menu


        listView = (ListView)findViewById(R.id.list_view_drawer);


        List list = new LinkedList();
        list.add(new Item("bla", R.drawable.icona1));
        list.add(new Item("bla bla", R.drawable.icona2));
        list.add(new Item("blaa", R.drawable.icona3));
 

        CustomAdapter adapter = new CustomAdapter(this, R.layout.list_adapter, list);
        listView.setAdapter(adapter);


        // listener
        listView.setOnItemClickListener(new DrawerItemClickListener());
        if (savedInstanceState == null) {//inizializzo al primo fragment
            selectItem(0);
        }


    }

    public void openDrawer(){
        mDrawerLayout.openDrawer(mDrawerRelativeLayout);
    }




    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView parent, View view, final int position, long id) {
            selectItem(position);
        }
    }


  private void selectItem(int position) {


       Fragment fragment;
       FragmentManager fragmentManager = getFragmentManager();
       switch(position) {
           default:

           case 0:
               fragment = new frag1();
               break;
           case 1:
               fragment = new frag2();
               break;
           case 2:
               fragment = new frag3t();
               break;
         

        }


        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, fragment)
                .commit();


        listView.setItemChecked(position, true);
        listView.setSelection(position);
//qui rallento un po la chiusura del menu per fare entare prima il fragment
      new Handler().postDelayed(new Runnable() {
          @Override
          public void run() {
              mDrawerLayout.closeDrawer(mDrawerRelativeLayout); // your fragment transactions go here
          }
      }, 200);



    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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);
    }
}


Post unito: 19 Luglio 2015, 14:35:04 CEST
Nei vari fragment ci sono delle immagini
e nel primo fragment c 'è uno slideshow di immagini con view flipper
« Ultima modifica: 19 Luglio 2015, 14:35:04 CEST da namelessg, Reason: Merged DoublePost »

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:sliding menu con navigation drawer
« Risposta #7 il: 19 Luglio 2015, 19:58:09 CEST »
0
Guarda è un tipo di approccio mai visto per una navigation drawer e quindi potrei dire minchiate  :-P comunque tanto per prova...
cambia in questo
Codice (Java): [Seleziona]
private void selectItem(int position) {

mDrawerLayout.closeDrawer(mDrawerRelativeLayout);
listView.setItemChecked(position, true);
        listView.setSelection(position);
       Fragment fragment;
       FragmentManager fragmentManager = getFragmentManager();
       switch(position) {
           default:

           case 0:
               fragment = new frag1();
               break;
           case 1:
               fragment = new frag2();
               break;
           case 2:
               fragment = new frag3t();
               break;
         

        }
if( fragment != null ) {
         fragmentManager.beginTransaction()
         .replace(R.id.content_frame, fragment)
         .commit();
}
    }
« Ultima modifica: 19 Luglio 2015, 20:00:38 CEST da pietroconti89 »