Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnItemClickListener Navigation Drawer

I am making an app from the example of Android Developers with the Navigation Drawer. I made the items but I don't know how I can open new Activity from each of items enlisted.

This is the MainActivity:

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<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub

    }

}
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    switch(position) {
    case 1:
            Intent a = new Intent(MainActivity.this, Page1.class);
            startActivity(a);
    break;
    case 2:
            Intent b = new Intent(MainActivity.this, Page2.class);
           startActivity(b);
           break;
    default:
    }
    }

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

And a Drawer List.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:textIsSelectable="false"   
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textColor="#fff"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/>

The click on the items don't call others activities, what is the mistake?

like image 351
Fabrizio Billeci Avatar asked May 23 '13 18:05

Fabrizio Billeci


People also ask

How to add navigation drawer in existing Android app?

To add a navigation drawer, first declare a DrawerLayout as the root view. Inside the DrawerLayout , add a layout for the main UI content and another view that contains the contents of the navigation drawer.

What is drawer layout in Android?

DrawerLayout acts as a top-level container for window content that allows for interactive "drawer" views to be pulled out from one or both vertical edges of the window.

Which method is used to handle click on the menu items of the navigation view?

Which method is used to handle click on the menu items of the navigation view? You have to use OnNavigationItemSelectedListener(MenuItem item) method.


2 Answers

Instead of your code:

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

Use this code:

private void selectItem(int position) {
    switch(position) {
    case 1:
            Intent a = new Intent(MainActivity.this, Activity1.class);
            startActivity(a);
    break;
    case 2:
            Intent b = new Intent(MainActivity.this, Activity2.class);
           startActivity(b);
           break;
    default:
    }
}

And remove this part: (It is not necessary)

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

switch(position) {
case 1:
        Intent a = new Intent(MainActivity.this, Page1.class);
        startActivity(a);
break;
case 2:
        Intent b = new Intent(MainActivity.this, Page2.class);
       startActivity(b);
       break;
default:
}
}
like image 149
Menos Avatar answered Sep 28 '22 06:09

Menos


Instead of using Activities just use a fragment and A fragment Manager to transition between them

like image 27
James Wahome Avatar answered Sep 28 '22 06:09

James Wahome