ghostrider
ghostrider

Reputation: 2238

Unable to add Fragment to the Navigation Drawer

I am trying to add a Fragment inside the Navigation Drawer but strangely the final output does not seems like a navigation drawer. In the image below The Drawer is static on the page with no Frame layout content and toolbar. My Doubt is whether can we add the RecyclerView inside Fragment and then display it or should I just use the RecyclerView?

enter image description here

Following are the files:

MainActivity.java:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setupToolbar();
    drawerLayout = (DrawerLayout) findViewById(R.id.drawerMainActivity);
    setupDrawerToggle();
    Fragment squadFragment = new SquadFragment();
    FragmentTransaction fragmentTransaction =  getFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.containerView,squadFragment,null);
    fragmentTransaction.commit();

}

void setupToolbar(){
    toolbar = (Toolbar) findViewById(R.id.toolBar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

void setupDrawerToggle(){
    drawerToggle = new  ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.app_name,R.string.app_n   ame);
    //This is necessary to change the icon of the Drawer Toggle upon state  change.
    drawerToggle.syncState();
}

}

ReyclerViewFragment.java :

public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.recyclerfragment,container,false);


    navTitles = getResources().getStringArray(R.array.navDrawerItems);
    navIcons = getResources().obtainTypedArray(R.array.navDrawerIcons);
    recyclerViewAdapter = new  Adapter(navTitles,navIcons,getActivity().getApplicationContext());
   recyclerView = (RecyclerView) v.findViewById(R.id.recyclerView);
    recyclerView.setAdapter(new  Adapter(null,null,getActivity().getApplicationContext()));
    recyclerView.setLayoutManager(new  LinearLayoutManager(getActivity().getApplicationContext()));
    recyclerView.setAdapter(recyclerViewAdapter);

    return v;
}

activity_main.xml :

 <android.support.v4.widget.DrawerLayout   xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:local="http://schemas.android.com/apk/res-auto"
 android:id="@+id/drawerMainActivity"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <include android:id="@+id/toolBar"
        layout="@layout/app_bar"/>
    <FrameLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/containerView">


    </FrameLayout>
</LinearLayout>

<fragment
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:name="com.example.hp.recyclernavigation.RecyclerFragment"
    android:id="@+id/fragment"
    >

    </fragment>

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

recyclerfragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent" >

<android.support.v7.widget.RecyclerView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/recyclerView"
    android:background="#FFFFFF"
    android:layout_gravity="start"
    />
</LinearLayout>

Adapter.java:

 Adapter(String[] titles , TypedArray icons , Context context){

    this.titles = titles;
    this.icons = icons;
    this.context = context;
 //        inflator=LayoutInflater.from(context);
 }

public class ViewHolder extends RecyclerView.ViewHolder  {

    TextView  navTitle;
    ImageView navIcon;
    Context context;

    public ViewHolder(View drawerItem , int itemType , Context context){

        super(drawerItem);
        this.context = context;
      //  drawerItem.setOnClickListener(this);
        if(itemType==1){
            navTitle = (TextView) itemView.findViewById(R.id.tv_NavTitle);
            navIcon = (ImageView) itemView.findViewById(R.id.iv_NavIcon);
        }
    }
}

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

    LayoutInflater layoutInflater = (LayoutInflater)  parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(viewType==1){
        View itemLayout =    layoutInflater.inflate(R.layout.drawer_item_layout,null);
        return new ViewHolder(itemLayout,viewType,context);
    }
    else if (viewType==0) {
        View itemHeader =   layoutInflater.inflate(R.layout.header_layout,null);
        return new ViewHolder(itemHeader,viewType,context);
    }
    return null;
}
@Override
public void onBindViewHolder(Adapter.ViewHolder holder, int position) {

    if(position!=0){
        holder.navTitle.setText(titles[position - 1]);
        holder.navIcon.setImageResource(icons.getResourceId(position-1,-1));
    }
}
@Override
public int getItemCount() {
    return titles.length+1;
}
@Override
public int getItemViewType(int position) {
    if(position==0)return 0;
    else return 1;
}

Can Someone Please help me!!

Upvotes: 1

Views: 584

Answers (2)

ribads
ribads

Reputation: 393

It looks like you have failed to specify the layout_gravity as well as the width property for the DrawerLayout

Your Layout should look somewhat like this

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:clickable="true"
        android:layout_height="match_parent"/>

    <fragment
        android:id="@+id/fragment_drawer"
        android:name="wsl.com.dryv.fragment.MainNavigationDrawerFragment"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"/>
</android.support.v4.widget.DrawerLayout>

Upvotes: 0

Minh Tri Nguyen
Minh Tri Nguyen

Reputation: 117

You can view Android Navigation Drawer Sample by Google: https://github.com/googlesamples/android-NavigationDrawer

Upvotes: 1

Related Questions