Jamie Coenen
Jamie Coenen

Reputation: 85

NavigationDrawer opening new activity

I implemented a basic navigationDrawer, with an array of strings. I want the user to click on something in the list and go to the corresponding Activity. However, I am completely at loss here. I have read quite a few answers out here, but it still is not clear how to do this.

I have found a useful way for all the items combining the answers. However it is still returning my MainActivity instead of other activities.

The addDrawerItems() function:

public void addDrawerItems() {
    mDrawerList = (ListView) findViewById(R.id.navList);
    String[] osArray = {"How-to", "Milestones", "Bridge & Beams", "Settings"};
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, osArray);
    mDrawerList.setAdapter(mAdapter);

    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch (position) {
                case 0: //First item
                    Intent intent1 = new Intent(MainActivity.this, SettingsActivity.class);
                    startActivity(intent1);
                    break;
                case 1: //Second item
                    Intent intent2 = new Intent(MainActivity.this, Bridge_BeamsActivity.class);
                    startActivity(intent2);
                    break;
                case 2: //Third item
                    Intent intent3 = new Intent(MainActivity.this, MileStonesActivity.class);
                    startActivity(intent3);
                    break;
                case 3: //Fourth item
                    Intent intent4 = new Intent(MainActivity.this, HowToActivity.class);
                    startActivity(intent4);
                    break;
                default:
            }
        }
    });
}

Now my onCreate where I call the addDrawerItems():

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

    //Check if there is any saved data
    checkFirstRun();

    //Apply saved data
    savedData();

    //Apply drawer
    addDrawerItems();

    }

Any help would be much appreciated! If there are any unclear pieces of code or my explanation, please don't hesitate to reach out.

In case you want to see what is already there, please check out my beta app in the Play Store: https://play.google.com/store/apps/details?id=jhpcoenen.connectlife.beams

Upvotes: 0

Views: 46

Answers (2)

javier Cuervas
javier Cuervas

Reputation: 933

EDIT

v.getId() will get you the id of the view, that is the id registered in the R class. As your array only contains strings, the only way to bind the string with the view Id is to manually check it. Build the listener and log your id to identify it

mDrawerList.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v){
       Log.d("your App","id clicked "+v.getId());
       //this view is the item clicked by the user
       Intent i = new Intent(getApplicationContext(),DestinyActivity.class)
       i.putExtra("optionSelected",v.getId());
       startActivity(i);
   }
});

you will get an id like 234252341, and for every item of your list a different id which you can associate with the string

ORIGINAL

You have to add a click listener to your ListView and put an action on it depending on the view clicked. Something like this

mDrawerList.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v){
       //this view is the item clicked by the user
       Intent i = new Intent(getApplicationContext(),DestinyActivity.class)
       i.putExtra("optionSelected",v.getId())
       startActivity(i)
   }
})

In DestinyActivity you have to get extras with Intent.getExtras and do whatever you need. PD: Code is handwritten, check it with your IDE

Upvotes: 1

abc
abc

Reputation: 295

Add the following code after setting the adapter:

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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



                pos =position;
                Intent intent = new Intent(MainActivity.this, CorrespondingActivity.class);
                startActivity(intent);


                switch (position) {
                    default:


                }

        }

});

The intent function will take to the desired activity.

Upvotes: 1

Related Questions