"面对同样的问题"导航抽屉中的Recycler视图

时间:2015-01-28 13:04:30

标签: android android-fragments navigation-drawer android-recyclerview recycler-adapter

可能重复,

Navigation Drawer RecyclerView Items Click to an Activity

面对同样的问题。请帮助解决这个问题。

我有一个导航抽屉,里面有回收者视图。我在适配器中设置了onClickListener。 现在我在点击任何抽屉项目后尝试打开一个片段。

编辑:

我正在使用Drawerlayout和ActionBarDrawerToggle在我的actionbaractivity中有导航抽屉。 我正在使用回收站视图来填充导航抽屉中的数据。在recyclerview适配器中,我可以使用onClickListener。

public static class ViewHolder extends RecyclerView.ViewHolder       implements View.OnClickListener 
{ 
 @Override
        public void onClick(View v) {

        }
}

我可以在onclick中打开一个活动,但我想在onc​​lick中打开一个片段。

使用,

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

    // Highlight the selected item, update the title, and close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(mPlanetTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);

但是从各方面都失败了。

2 个答案:

答案 0 :(得分:0)

对于片段事务,您可能希望在活动中而不是在适配器中处理导航抽屉RecyclerView的点击次数:

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();
            return true;
        }

        return false;
    }

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

    }
});

有关详细说明和代码,请参阅本教程: http://www.android4devs.com/2015/01/recycler-view-handling-onitemtouch-for.html

答案 1 :(得分:0)

在适配器中输入:

@Override

public void onClick(View v) {

MainActivity.onClickedMenu(getPosition());

}

在您的MainActivity中输入:

public static void onClickedMenu(int id){
// Do what you want 

}

简单是最好的。