2017-04-25 96 views
0

我有聽衆對我的'標準'listview工作得很好,但我想讓各個listview項目水平滾動,這需要很多試用&錯誤,但它終於奏效。但是,這會讓我在聽到任何點擊時感到敏感。我希望有一個簡單的修復,如添加其他屬性等'setOnItemClickListener/setOnItemLongClickListener'在將'Horizo​​ntalScrollView'添加到列表視圖後無法工作

這裏是我的聽衆(最小):

 listViewAllCards.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

      @Override 
      public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) { 

       Log.i("LOG: (DP) SHORT","position " + position + " ID: " + id); 

       switch (position) { 

       // Training 
       case 0: 
       break; 
       } 
      } 
     }); 

,這是我的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/database_page_list_selector" 
       android:orientation="horizontal" 
       android:padding="5dp"> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <RelativeLayout 
      android:id="@+id/thumbnailDatabase" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_marginRight="5dp" 
      android:background="@drawable/gradient_blue_bg" 
      android:orientation="horizontal" 
      android:padding="3dp" 
      android:weightSum="1"> 

      <TextView 
       android:text="KNOW" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#040404" 
       android:textSize="12sp" 
       android:textStyle="italic" 
       android:scrollHorizontally="true" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentStart="true" 
       android:id="@+id/databaseListViewKnowLevel" /> 

      <TextView 
       android:text="SLEEP" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#040404" 
       android:textSize="12sp" 
       android:textStyle="italic" 
       android:scrollHorizontally="true" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentStart="true" 
       android:id="@+id/databaseListViewSleepLevel" /> 

      <TextView 
       android:id="@+id/txtlvDictionaryLookUpForeignWord" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_toRightOf="@+id/databaseListViewKnowLevel" 
       android:background="@android:color/transparent" 
       android:cacheColorHint="@android:color/transparent" 
       android:ellipsize="end" 
       android:listSelector="@android:color/transparent" 
       android:maxLines="2" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:scrollHorizontally="true" 
       android:text="CHAR" 
       android:textColor="#FFFFFF" 
       android:textSize="24sp" 
       android:textStyle="bold" /> 

      <TextView 
       android:id="@+id/databaseListViewForeignAlt" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:layout_toRightOf="@+id/txtlvDictionaryLookUpForeignWord" 
       android:text="ALT" 
       android:textColor="#040404" 
       android:textSize="12sp" 
       android:scrollHorizontally="true" 
       android:textStyle="italic" /> 

      <TextView 
       android:id="@+id/databaseListViewForeignWord" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:layout_toRightOf="@+id/databaseListViewForeignAlt" 
       android:paddingLeft="10dp" 
       android:text="WORD" 
       android:textColor="#040404" 
       android:textSize="12sp" 
       android:scrollHorizontally="true" 
       android:textStyle="italic" /> 

      <TextView 
       android:id="@+id/databaseListViewEnglishWord" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="ENGLISH" 
       android:textColor="#040404" 
       android:textSize="12sp" 
       android:textStyle="italic" 
       android:layout_alignParentBottom="true" 
       android:ellipsize="end" 
       android:maxLines="2" 
       android:scrollHorizontally="true" 
       android:layout_toRightOf="@+id/txtlvDictionaryLookUpForeignWord" 
       android:layout_toEndOf="@+id/txtlvDictionaryLookUpForeignWord" /> 

     </RelativeLayout> 

    </HorizontalScrollView> 

</RelativeLayout> 

[編輯]有趣的是,當我點擊水平滾動區域時,它可以工作,所以它可能是滾動竊取列表視圖項目中的「焦點」的問題:

enter image description here

[編輯]添加以下到類代碼,所述OnItem聽者仍然處於「的onCreate」片段(我希望是罰款)。我看到這個射擊,但還是在實際的項目不敏感:

private class CustomAllCardsAdapter extends ArrayAdapter<Flashcard> { 

     public CustomAllCardsAdapter() { 

      super(DatabasePage.this, R.layout.database_page_horizontal_list_view_item,allFlashcards); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      View itemView = convertView; 

      if (itemView == null) { 

       itemView = getLayoutInflater().inflate(R.layout.database_page_horizontal_list_view_item, parent, false); 
      } 

      final HorizontalScrollView hScrollView = (HorizontalScrollView) itemView.findViewById(R.id.hScrollView); 
      hScrollView.setOnTouchListener(new View.OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        Log.i("DP: DEBUG", "HSCROLL" + event); 

        hScrollView.getParent().requestDisallowInterceptTouchEvent(true); 

        return false; 
       } 
      }); 

回答

0

地址:

android:descendantFocusability="blocksDescendants" 

到列表項的父佈局..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:descendantFocusability="blocksDescendants" //add this 
      android:background="@drawable/database_page_list_selector" 
      android:orientation="horizontal" 
      android:padding="5dp"> 

編輯

scrollview觸摸事件

scrollView1 = (ScrollView) findViewById(R.id.scrollview); 
scrollView1.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     scrollView1.getParent().requestDisallowInterceptTouchEvent(true); 
     return false; 
    } 
}); 
+0

添加requestDisallowInterceptTouchEvent(true);可悲的是,它並沒有幫助,還是沒有反應。爲了確保,我再次移除了Horizo​​ntalScroll並且它可以工作。任何其他想法? – Mairyu

+0

我編輯了答案.... – rafsanahmad007

+0

可能顯示我的無知,但它花了一段時間,以避免空指針,因爲我不知道該把代碼段放在哪裏。最終將其放入ArrayAdapters的getView中。我看到它正在執行(通過Log.i),但onClick仍然不會觸發。我把這行保留在xml中(因爲它似乎至少使scroller敏感「,所以你的代碼片段試圖在滾動上設置一個監聽器,以後再禁用它,對吧? – Mairyu

相關問題