0
我有聽衆對我的'標準'listview工作得很好,但我想讓各個listview項目水平滾動,這需要很多試用&錯誤,但它終於奏效。但是,這會讓我在聽到任何點擊時感到敏感。我希望有一個簡單的修復,如添加其他屬性等'setOnItemClickListener/setOnItemLongClickListener'在將'HorizontalScrollView'添加到列表視圖後無法工作
這裏是我的聽衆(最小):
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>
[編輯]有趣的是,當我點擊水平滾動區域時,它可以工作,所以它可能是滾動竊取列表視圖項目中的「焦點」的問題:
[編輯]添加以下到類代碼,所述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;
}
});
添加
requestDisallowInterceptTouchEvent(true);
可悲的是,它並沒有幫助,還是沒有反應。爲了確保,我再次移除了HorizontalScroll並且它可以工作。任何其他想法? – Mairyu我編輯了答案.... – rafsanahmad007
可能顯示我的無知,但它花了一段時間,以避免空指針,因爲我不知道該把代碼段放在哪裏。最終將其放入ArrayAdapters的getView中。我看到它正在執行(通過Log.i),但onClick仍然不會觸發。我把這行保留在xml中(因爲它似乎至少使scroller敏感「,所以你的代碼片段試圖在滾動上設置一個監聽器,以後再禁用它,對吧? – Mairyu