2

我在我的主要活動中使用了一個android.support.v4.widget.DrawerLayout和com.android.support:appcompat-v7(它擴展了AppCompatActivity)在抽屜中提供導航抽屜和ListView,以呈現用戶可點擊的項目。帶ListView的DrawerLayout不處理三星Tab/Android 5.0.2上的項目點擊

這一切都工作得很好除了在三星標籤設備運行Android 5.0.2

該代碼已經在各種版本的Android 4.2.1至6.0.1上測試並按預期工作,並且在運行5.0.2的模擬器上正常工作。

在三星設備上,水龍頭抽屜會在水龍頭上消失,但從不顯示新活動(例如下面代碼中的MyPreferenceActivity或HelpPageActivity)。

我的問題:有什麼不正確的代碼或佈局,可能會導致這不工作在三星的Tab/5.0.2設備?

主要活動是如下:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:gravity="fill" 
    android:background="@color/standard_bkgnd"> 

<include 
    android:id="@+id/toolbar_actionbar" 
    layout="@layout/toolbar_actionbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/toolbar_actionbar" 
    > 

    <!-- normal content view --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     ...main UI stuff... 
    </LinearLayout> 

    <!-- drawer view --> 
    <include layout="@layout/nav_drawer" /> 

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

</LinearLayout> 

的nav_drawer佈局如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="280dp" 
    android:layout_height="match_parent" 
    android:background="@color/button_material_dark" 
    android:orientation="vertical" 
    android:layout_gravity="start"> 

    <RelativeLayout 
     android:id="@+id/drawer_header" 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:background="@color/material_blue_grey_800" 
     android:padding="8dp" > 

     <ImageView 
      android:id="@+id/app_icon" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:src="@drawable/ic_launcher_08" 
      android:layout_marginTop="15dp" 
      android:contentDescription="@string/app_icon"/> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="42dp" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="15dp" 
      android:layout_toRightOf="@+id/app_icon" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/app_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/app_name" 
       android:textColor="#fff" 
       android:textSize="16sp" 
       android:textStyle="bold" /> 

      <TextView 
       android:id="@+id/desc" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="bottom" 
       android:layout_marginTop="4dp" 
       android:text="@string/app_long_name" 
       android:textColor="#fff" 
       android:textSize="12sp" /> 
     </LinearLayout> 
    </RelativeLayout> 

    <ListView 
     android:id="@+id/nav_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/drawer_header" 
     android:choiceMode="singleChoice"/> 

</RelativeLayout> 

的ListView的被配置成呈現一個數字,用戶可以點擊以查看其他內容項的在應用程序內或執行其他活動:

// Drawer Item click listeners 
    drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      switch (position) { 
       case 0: // preferences 
        startActivity(new Intent(that, MyPreferenceActivity.class)); 
        break; 
       case 1: // help 
        startActivity(new Intent(that, HelpPageActivity.class)); 
        break; 
       case 2: // send feedback 
        composeEmail(); 
        break; 
       default: 
        break; 
      } 

      _drawerLayout.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        _drawerLayout.closeDrawers(); 
       } 
      }, 500); 

      drawerList.clearChoices(); 

     } 
    }); 

任何建議很多a ppreciated!

+0

什麼是_drawerLayout.postDelayed()?你可以踢出來再測試一次嗎? – XxGoliathusxX

+0

@XxGoliathusxX - 它旨在短暫延遲後關閉導航抽屜。我會毫不遲疑地嘗試。希望我有一個可以測試的設備 - 我現在依賴測試版測試人員的報告來查看這個特定的HW/OS組合。 – StephenT

回答

0

因此,事實證明,與三星Tab/5.0.2沒有任何關係 - 這是巧合的,唯一的問題報告是來自這些設備。

的問題是,我有我的主要活動中的景觀佈局,有正常的內容視圖的順序,顛倒抽屜視圖,這阻止接收Click事件時listItems:

<android.support.v4.widget.DrawerLayout 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_below="@id/toolbar_actionbar" 
> 

<!-- normal content view --> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    ...main UI stuff... 
</LinearLayout> 

<!-- drawer view *** this must come after the normal content view *** --> 
<include layout="@layout/nav_drawer" /> 

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

只要我切換它們,事情就按預期工作。衛生署。

+0

但是,如果您將抽屜放在內容的下面,它會在不理解高程的Android 4上打破,不是嗎? –

+0

@EugenPechanec - 在4.2.1和4.4.2上似乎都能正常工作。 – StephenT