2016-11-04 85 views
4

這是我發現的一種奇怪的錯誤。當DrawerLayout關閉時,RecyclerView成爲焦點

但是,如果我在一個片段中有一個RecyclerView,然後打開然後關閉我的DrawerLayout,那麼我的RecyclerView就會成爲焦點。這意味着關閉我的DrawerLayout將導致ScrollView跳轉到我的RecyclerView。顯然,我希望ScrollView的位置在DrawerLayout關閉時不會移動,並且絕對不會放在我的RecyclerView上。


CODE

在我的申請,我都包含在ScrollViews RecyclerViews,類似這樣的設置:

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

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

     <RelativeLayout 
      android:layout_alignParentTop="true" 
      android:layout_width="match_parent" 
      android:layout_height="180dp"> 

      <android.support.v7.widget.AppCompatImageView 
       android:id="@+id/header_photo" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:adjustViewBounds="true" 
       android:tint="#80000000" 
       android:scaleType="centerCrop"/> 

      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:layout_centerHorizontal="true"> 

       <TextView android:id="@+id/header_text" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:gravity="center" 
        android:paddingTop="2dp" 
        android:paddingBottom="2dp" 
        android:textColor="@color/text_SecondaryColor" 
        android:textSize="@dimen/header_xxlarge"/> 

       <View android:id="@+id/divider" 
        android:layout_width="0dp" 
        android:layout_height="@dimen/hr_thick" 
        android:background="@color/accent_PrimaryColor"/> 
      </LinearLayout> 
     </RelativeLayout> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_margin="20dp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recyclerview" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 

      <Button android:id="@+id/button_more" 
       android:layout_marginTop="6dp" 
       android:layout_marginBottom="6dp" 
       android:layout_width="400px" 
       android:layout_height="100px" 
       android:layout_gravity="center" 
       android:gravity="center" 
       android:background="@drawable/button_dark" 
       android:textColor="@drawable/button_dark_textcolor"/> 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

而且我DrawerLayout的XML設計安排是這樣的:

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

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

      <include 
       android:layout_height="wrap_content" 
       android:layout_width="match_parent" 
       layout="@layout/toolbar" /> 
     </LinearLayout> 

     <FrameLayout 
      android:id="@+id/contentframe" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 

    <RelativeLayout 
     android:layout_width="300dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/background_Secondary"> 

     <!-- Relative Layout : Back Button --> 
     <RelativeLayout 
      android:id="@+id/menu_backcontainer" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize"> 

      <ImageView 
       android:id="@+id/menu_back" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="20dp" 
       android:src="@drawable/angle" 
       android:layout_centerVertical="true" 
       android:layout_alignParentEnd="true" /> 
     </RelativeLayout> 

     <!-- List View : Menu Drawer Content --> 
     <ListView 
      android:id="@+id/menu" 
      android:layout_below="@id/menu_backcontainer" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:choiceMode="singleChoice" 
      android:background="@color/background_PrimaryDarkColor"> 
     </ListView> 
    </RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

我不知道我需要什麼其他的Java代碼,包括在這裏,但我這是怎麼實例化了我RecyclerView:

recyclerView = (RecyclerView)view.findViewById(R.id.recyclerview); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext().getApplicationContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setNestedScrollingEnabled(false); 

和我DrawerLayout:

drawerlayout = (DrawerLayout)findViewById(R.id.drawer); 
menu = (ListView)findViewById(R.id.menu); 
MenuAdapter adapter = new MenuAdapter(
     this, 
     R.layout.listview_menuitem, 
     menuItemArray); 
menu.setAdapter(adapter); 
menu.setOnItemClickListener(new menuItemClickListener()); 

menuToggle = new ActionBarDrawerToggle(
     this, 
     drawerlayout, 
     toolbar, 
     R.string.app_name, 
     R.string.app_name); 
    drawerlayout.setDrawerListener(menuToggle); 
    menuToggle.syncState(); 

回答

0

哎呀,這是驚人的什麼時刻遠離電腦和一杯咖啡就可以做到。

我只是將我的FrameLayout的focusableInTouchMode屬性設置爲true

我想這會使得在打開DrawerLayout之後觸摸屏幕上任何位置時RecyclerViews的願望成爲ScrollView中的聚焦元素。也許有更好,更徹底的解釋。但我希望這可以幫助任何可能遇到此問題的人。