Autore Topic: Navigation Drawer  (Letto 647 volte)

Offline YvesB

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Github
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    Young Peacock
  • Sistema operativo:
    Linux Mint 15
Navigation Drawer
« il: 22 Maggio 2013, 16:39:52 CEST »
0
Ciao a tutti! Per la prima volta mi imbatto in un Layout dinamico e molto affascinato dal Navigation Drawer, da poco inserito fra le guide di Android Developers ho costruito una applicazione con questo Layout e Activity. Tutto funzionante.

Ora però vorrei capire come rendere gli <item> del Drawer cliccabili (spero vada bene il metodo onClick) e la sintassi per determinare l'intent di aprire nuove Activity cliccando appunto sugli item..grazie..se volete posto il codice di fino a dove sono arrivato

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Navigation Drawer
« Risposta #1 il: 22 Maggio 2013, 16:54:51 CEST »
+1
Ora però vorrei capire come rendere gli <item> del Drawer cliccabili (spero vada bene il metodo onClick) e la sintassi per determinare l'intent di aprire nuove Activity cliccando appunto sugli item..grazie..se volete posto il codice di fino a dove sono arrivato

Codice (Java): [Seleziona]
 {
   ....
   mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
   ...
 }
 
   private class DrawerItemClickListener implements ListView.OnItemClickListener {

       @Override
       public void onItemClick(AdapterView parent, View view, int position,long id) {
         
         //........
         mDrawer.closeDrawer(mDrawerList);
   
       }
  }

Offline YvesB

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Github
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    Young Peacock
  • Sistema operativo:
    Linux Mint 15
Re:Navigation Drawer
« Risposta #2 il: 23 Maggio 2013, 16:25:43 CEST »
0
Grazie della risposta ma il metodo era già implementato..quindi ho stabilito l'intent senza specificare l'item cliccato ma comunque in entrambi i casi non non mi apre la seconda Activity quindi posto il codice completo
Codice (Java): [Seleziona]
package com.xxxx.xxxx;



import java.util.Locale;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;


public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private String[] mGalaxyTitles;

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

        mTitle = mDrawerTitle = getTitle();
        mGalaxyTitles = getResources().getStringArray(R.array.Galaxys_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

       
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mGalaxyTitles));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

       
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

       
        mDrawerToggle = new ActionBarDrawerToggle(
                this,                
                mDrawerLayout,        
                R.drawable.ic_drawer,  
                R.string.drawer_open,  
                R.string.drawer_close  
                ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

   
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
       
        switch(item.getItemId()) {
        case R.id.action_websearch:
            Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
            intent.putExtra(SearchManager.QUERY, getActionBar().getTitle());
           
            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivity(intent);
            } else {
                Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show();
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

   
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
       
                @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 Intent Page1 = new Intent(MainActivity.this, Page1.class);
                 startActivity(Page1);
                 closeDrawer(mDrawerList);
        }

                private void closeDrawer(ListView mDrawerList) {
                       
                       
                }
    }

    private void selectItem(int position) {
     
        Fragment fragment = new GalaxyFragment();
        Bundle args = new Bundle();
        args.putInt(GalaxyFragment.ARG_Galaxy_NUMBER, position);
        fragment.setArguments(args);

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

       
        mDrawerList.setItemChecked(position, true);
        setTitle(mGalaxyTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }

   

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
       
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
 
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

   
    public static class GalaxyFragment extends Fragment {
        public static final String ARG_Galaxy_NUMBER = "Galaxy_number";

        public GalaxyFragment() {
           
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_Galaxy, container, false);
            int i = getArguments().getInt(ARG_Galaxy_NUMBER);
            String Galaxy = getResources().getStringArray(R.array.Galaxys_array)[i];

            int imageId = getResources().getIdentifier(Galaxy.toLowerCase(Locale.getDefault()),
                            "drawable", getActivity().getPackageName());
            ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
            getActivity().setTitle(Galaxy);
            return rootView;
        }
    }
}

Io vorrei fare come nel onOptionsItemSelected con
Codice (Java): [Seleziona]
switch (item.getItemId()) {
              case R.id.menu1:
                  menu1();
                  return true;
              case R.id.menu2:
                  menu2();
                  return true;
e così via ma non avendo a disposizione gli Id per ogni String non so come fare..non vorrei fosse un problema di emulatore o degli altri Layout ma non riscontro errori né in Eclipse né sul LogCat

Post unito: 23 Maggio 2013, 19:00:11 CEST
Ok ho risolto!  :-P
Codice (Java): [Seleziona]
  private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
            Intent i = new Intent(MainActivity.this, Page1.class);
                            startActivity(i);
        }
    }


Ora però vorrei che ogni dei miei Item mi portasse ad Activity diverse
« Ultima modifica: 23 Maggio 2013, 19:00:11 CEST da FabrizioBill, Reason: Merged DoublePost »