如何将OnItemClickListener添加到导航抽屉?

时间:2016-08-29 10:07:29

标签: android

我正在使用导航抽屉开发应用程序。我创建了这些项目,但我不知道如何从每个已登记的项目中打开新的活动。以下是我使用的代码。当点击它应该传递给其他人的项目时,我该如何解决?

//MainActivity

public class MainActivity extends ActionBarActivity {

                //First We Declare Titles And Icons For Our Navigation Drawer List View
                //This Icons And Titles Are holded in an Array as you can see

                String TITLES[] = {"Home","Events","Mail","Shop","Travel"};
                int ICONS[] = {R.drawable.search_icon,R.drawable.search_icon,R.drawable.search_icon,R.drawable.search_icon,R.drawable.search_icon};

                //Similarly we Create a String Resource for the name and email in the header view
                //And we also create a int resource for profile picture in the header view

                String NAME = "Akash Bangad";
                String EMAIL = "akash.bangad@android4devs.com";
                int PROFILE = R.drawable.search_icon;

                private Toolbar toolbar;                              // Declaring the Toolbar Object

                RecyclerView mRecyclerView;                           // Declaring RecyclerView
                RecyclerView.Adapter mAdapter;                        // Declaring Adapter For Recycler View
                RecyclerView.LayoutManager mLayoutManager;            // Declaring Layout Manager as a linear layout manager
                DrawerLayout Drawer;                                  // Declaring DrawerLayout

                ActionBarDrawerToggle mDrawerToggle;                  // Declaring Action Bar Drawer Toggle




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

                /* Assinging the toolbar object ot the view
                and setting the the Action bar to our toolbar
                 */
                    toolbar = (Toolbar) findViewById(R.id.tool_bar);
                    setSupportActionBar(toolbar);




                    mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); // Assigning the RecyclerView Object to the xml View

                    mRecyclerView.setHasFixedSize(true);                            // Letting the system know that the list objects are of fixed size

                    mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);       // Creating the Adapter of MyAdapter class(which we are going to see in a bit)
                    // And passing the titles,icons,header view name, header view email,
                    // and header view profile picture

                    mRecyclerView.setAdapter(mAdapter);                              // Setting the adapter to RecyclerView

                    mLayoutManager = new LinearLayoutManager(this);                 // Creating a layout Manager

                    mRecyclerView.setLayoutManager(mLayoutManager);                 // Setting the layout Manager


                    Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);        // Drawer object Assigned to the view
                    mDrawerToggle = new ActionBarDrawerToggle(this,Drawer,toolbar,R.string.openDrawer,R.string.closeDrawer){

                        @Override
                        public void onDrawerOpened(View drawerView) {
                            super.onDrawerOpened(drawerView);
                            // code here will execute once the drawer is opened( As I dont want anything happened whe drawer is
                            // open I am not going to put anything here)
                        }

                        @Override
                        public void onDrawerClosed(View drawerView) {
                            super.onDrawerClosed(drawerView);
                            // Code here will execute once drawer is closed
                        }



                    }; // Drawer Toggle Object Made
                    Drawer.setDrawerListener(mDrawerToggle); // Drawer Listener set to the Drawer toggle
                    mDrawerToggle.syncState();               // Finally we set the drawer toggle sync State

                }


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

    //MyAdapter

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

        private static final int TYPE_HEADER = 0;  // Declaring Variable to Understand which View is being worked on
        // IF the view under inflation and population is header or Item
        private static final int TYPE_ITEM = 1;

        private String mNavTitles[]; // String Array to store the passed titles Value from MainActivity.java
        private int mIcons[];       // Int Array to store the passed icons resource value from MainActivity.java

        private String name;        //String Resource for header View Name
        private int profile;        //int Resource for header view profile picture
        private String email;       //String Resource for header view email


        // Creating a ViewHolder which extends the RecyclerView View Holder
        // ViewHolder are used to to store the inflated views in order to recycle them

        public static class ViewHolder extends RecyclerView.ViewHolder {
            int Holderid;

            TextView textView;
            ImageView imageView;
            ImageView profile;
            TextView Name;
            TextView email;


            public ViewHolder(View itemView,int ViewType) {                 // Creating ViewHolder Constructor with View and viewType As a parameter
                super(itemView);


                // Here we set the appropriate view in accordance with the the view type as passed when the holder object is created

                if(ViewType == TYPE_ITEM) {
                    textView = (TextView) itemView.findViewById(R.id.rowText); // Creating TextView object with the id of textView from item_row.xml
                    imageView = (ImageView) itemView.findViewById(R.id.rowIcon);// Creating ImageView object with the id of ImageView from item_row.xml
                    Holderid = 1;                                               // setting holder id as 1 as the object being populated are of type item row
                }
                else{


                    Name = (TextView) itemView.findViewById(R.id.name);         // Creating Text View object from header.xml for name
                    email = (TextView) itemView.findViewById(R.id.email);       // Creating Text View object from header.xml for email
                    profile = (ImageView) itemView.findViewById(R.id.circleView);// Creating Image view object from header.xml for profile pic
                    Holderid = 0;                                                // Setting holder id = 0 as the object being populated are of type header view
                }
            }


        }



        MyAdapter(String Titles[],int Icons[],String Name,String Email, int Profile){ // MyAdapter Constructor with titles and icons parameter
            // titles, icons, name, email, profile pic are passed from the main activity as we
            mNavTitles = Titles;                //have seen earlier
            mIcons = Icons;
            name = Name;
            email = Email;
            profile = Profile;                     //here we assign those passed values to the values we declared here
            //in adapter



        }



        //Below first we ovverride the method onCreateViewHolder which is called when the ViewHolder is
        //Created, In this method we inflate the item_row.xml layout if the viewType is Type_ITEM or else we inflate header.xml
        // if the viewType is TYPE_HEADER
        // and pass it to the view holder

        @Override
        public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            if (viewType == TYPE_ITEM) {
                View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row,parent,false); //Inflating the layout

                ViewHolder vhItem = new ViewHolder(v,viewType); //Creating ViewHolder and passing the object of type view

                return vhItem; // Returning the created object

                //inflate your layout and pass it to view holder

            } else if (viewType == TYPE_HEADER) {

                View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.header,parent,false); //Inflating the layout

                ViewHolder vhHeader = new ViewHolder(v,viewType); //Creating ViewHolder and passing the object of type view

                return vhHeader; //returning the object created


            }
            return null;

        }

        //Next we override a method which is called when the item in a row is needed to be displayed, here the int position
        // Tells us item at which position is being constructed to be displayed and the holder id of the holder object tell us
        // which view type is being created 1 for item row
        @Override
        public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
            if(holder.Holderid ==1) {                              // as the list view is going to be called after the header view so we decrement the
                // position by 1 and pass it to the holder while setting the text and image
                holder.textView.setText(mNavTitles[position - 1]); // Setting the Text with the array of our Titles
                holder.imageView.setImageResource(mIcons[position -1]);// Settimg the image with array of our icons
            }
            else{

                holder.profile.setImageResource(profile);           // Similarly we set the resources for header view
                holder.Name.setText(name);
                holder.email.setText(email);
            }
        }

        // This method returns the number of items present in the list
        @Override
        public int getItemCount() {
            return mNavTitles.length+1; // the number of items in the list will be +1 the titles including the header view.
        }


        // Witht the following method we check what type of view is being passed
        @Override
        public int getItemViewType(int position) {
            if (isPositionHeader(position))
                return TYPE_HEADER;

            return TYPE_ITEM;
        }

        private boolean isPositionHeader(int position) {
            return position == 0;
        }

    }


//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/DrawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:elevation="7dp">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


        <include
            android:id="@+id/tool_bar"
            layout="@layout/tool_bar">
        </include>


    </LinearLayout>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/RecyclerView"
        android:layout_width="320dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"

        android:background="#ffffff"
        android:scrollbars="vertical">

    </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.DrawerLayout>


//item_row.xml

            <?xml version="1.0" encoding="utf-8"?>
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:layout_height="wrap_content"
                android:background="#ffffff"
                android:orientation="horizontal">


                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/rowIcon"
                    android:paddingLeft="16dp"
                    android:src="@drawable/search_icon"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="12dp"
                    android:paddingTop="4dp"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="Medium Text"
                    android:id="@+id/rowText" />

            </LinearLayout>

0 个答案:

没有答案