如何使用意图导航抽屉recyclerview项目打开一个新的活动片段? [英] how to use intents in recyclerview items of navigation drawer to open a new activity fragment?

查看:243
本文介绍了如何使用意图导航抽屉recyclerview项目打开一个新的活动片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的活动类就像下面这样:

    /*ToolBar SetUp*/
    app_toolBar = (Toolbar) findViewById(R.id.toolbar_header);
    setSupportActionBar(app_toolBar);
    getSupportActionBar().setDisplayShowTitleEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);


    String TITLES[] = {"Home", "Search", "HalalRewards", "Contact Us", "User Guide", "F.A.Q", "Settings", "Share"};
    int ICONS[] = {R.drawable.ic_action_home, R.drawable.ic_search, R.drawable.ic_rewardsss, R.drawable.ic_contact, R.drawable.ic_uguide, R.drawable.ic_faq, R.drawable.ic_settings, R.drawable.ic_shareee};

    String NAME = "ESignature IT Solution";
    String EMAIL = "info@esignature.com.np";
    int PROFILE = R.drawable.intologo;

    /*Drawer SetUp*/
    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 DrawerAdapter(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
    mRecyclerView.setOnClickListener(new DrawerItemClickListener());
    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, app_toolBar, R.string.openDrawer, R.string.closeDrawer) {

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            // TO DO Execute code when Drawer view open
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            // TO DO Execute code when once Drawer is close
        }


    };
    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) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

        case R.id.action_settings:
            return true;

    }

    return super.onOptionsItemSelected(item);
}

// create fragmrnt loader funtion
// id get from adapter ....


/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements AdapterView.OnItemClickListener, View.OnClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        /*selectItem(position);*/ ///////////
        // display view for selected nav drawer item
        displayView(position);

    }


    @Override
    public void onClick(View v) {

    }
}

// Diplaying fragment view for selected nav drawer list item
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        /*case 0:
            fragment = new Fragment();
            break;*/
        case 1:
            fragment = new SearchActivity();
            break;
         case 2:
            fragment = new HalalRewardsActivity();
            break;
        case 3:
            fragment = new ContactUsFragment();
            break;
        case 4:
            fragment = new GuideFragment();
            break;
        case 5:
            fragment = new FaqFragment();
            break;
        case 6:
            fragment = new SettingsFragment();
            break;
        case 7:
            fragment = new ShareFragment();
            break;

        default:
            break;
    }

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


        Drawer.closeDrawer(mRecyclerView);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}
}

我是一个新的程序员。所以,适当的帮助将是值得称赞的。
先谢谢了。

I am a new programmer. So proper help would be praiseworthy. Thanks in advance.

推荐答案

唐T写:

 mRecyclerView.setOnClickListener(new DrawerItemClickListener());

,因为的OnClick是不适用在RecyclerView。
相反,使用下面的codeS:

because OnClick is not applicable in RecyclerView. Instead use the following codes:

        final GestureDetector mGestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() {

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }

    });


    mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
            View child = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());

            if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
                Drawer.closeDrawers();

                Toast.makeText(MainActivity.this, "The Item Clicked is: " + recyclerView.getChildPosition(child), Toast.LENGTH_SHORT).show();

                if (recyclerView.getChildAdapterPosition(child) == 0) {

                } else if (recyclerView.getChildAdapterPosition(child) == 5) {

                } else {
                    LoadFragmentView(recyclerView.getChildPosition(child));
                }
            }

            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {

        }
    });

这篇关于如何使用意图导航抽屉recyclerview项目打开一个新的活动片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆