1

我想在導航抽屜裏添加片段,但奇怪的是最終的輸出不像導航抽屜。在下面的圖片中,抽屜在頁面上是靜態的,沒有框架佈局內容和工具欄。我的疑問是,我們是否可以在Fragment中添加RecyclerView然後顯示它,或者我應該只使用RecyclerView?無法添加片段到導航抽屜

enter image description here

以下是文件:

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

有人可以請幫助我!

+3

大約一年前,Android在設計庫中引入了'NavigationView',它負責設置抽屜。考慮使用,而不是http://android-developers.blogspot.se/2015/05/android-design-support-library.html – Sharj

回答

0

它看起來像您沒有指定layout_gravity以及爲DrawerLayout

width屬性佈局應該看起來有點像這樣

<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> 
+0

我有片段裏面的recyclerview和這個片段,我在抽屜layout..to內添加哪些值將「dimen/navigation_drawer_width」和「layout/fragment_navigation_drawer」指向?他們會參考recyclerview的寬度和佈局嗎? – ghostrider

+0

寬度完全取決於你。不過我會推薦200dp-250dp之間的東西。佈局應該參考主要片段的佈局。應該是@ layout/recyclerfragment。 – ribads