2012-10-23 22 views
4

我有一個列表視圖,每個列表項都包含2個視圖(此ListView看起來像一個GridView,有2列)。 我需要頁眉和頁腳,並且它們不在GridView中,所以我轉而使用列表視圖。對列表視圖的特定子項應用android選擇器,並禁用同一列表項中的其他子項的選擇器

我想爲每個列表項的單個子視圖選擇器,列表選擇器不起作用,它將選擇器應用於兩個子視圖。

我到目前爲止試過的是什麼?

我使每個單個元素的根視圖爲FrameLayout,我使用android:foreground="@drawable/some_selector"屬性,因此我可以模擬drawSelectorOnTop屬性。

我的問題:

我怎樣才能選擇僅適用於ListView項按下的孩子。

列表視圖佈局

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

    <ListView 
     android:id="@+id/episode_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:divider="@android:color/black" 
     android:dividerHeight="5dp" 
     android:listSelector="@null" 
     android:descendantFocusability="afterDescendants" /> 

</RelativeLayout> 

插曲項目

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:foreground="@drawable/all_show_cell_background_selector" > 

    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/llEpisode" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#282828" 
     android:paddingBottom="5dp" > 

     <ImageView 
      android:id="@+id/episodeImage" 
      android:layout_width="160dp" 
      android:layout_height="90dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:adjustViewBounds="true" 
      android:contentDescription="@string/app_name" 
      android:scaleType="centerCrop" 
      android:src="@drawable/video_blank" /> 

     <TextView 
      android:id="@+id/episodeDuration" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@id/episodeImage" 
      android:layout_alignLeft="@id/episodeImage" 
      android:background="@android:color/black" 
      android:gravity="right" 
      android:padding="2dp" 
      android:textColor="#FFFFFF" 
      android:textSize="11sp" /> 
     <!-- android:textColor="#b5b4b4" --> 

     <TextView 
      android:layout_marginTop="2dp" 
      android:id="@+id/episodeTitle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/episodeImage" 
      android:gravity="right" 
      android:paddingRight="5dp" 
      android:singleLine="true" 
      android:text="hdgsagafasfsdafsdfsdfasddfsad" 
      android:textColor="#ffffff" 
      android:textSize="14sp" > 

     </TextView> 

     <TextView 
      android:id="@+id/showName" 
      android:layout_marginTop="2dp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/episodeTitle" 
      android:clickable="true" 
      android:gravity="right" 
      android:paddingRight="5dp" 
      android:text="hdgsagafasfsdafsdfsdfasddfsad" 
      android:textColor="#A8A8A8" 
      android:textSize="13sp" > 

     </TextView> 

     <TextView 
      android:layout_marginTop="2dp" 
      android:id="@+id/noOfViewsText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/showName" 
      android:layout_alignParentBottom="true" 
      android:gravity="right" 
      android:paddingRight="5dp" 
      android:text="@string/number_of_views_text" 
      android:textColor="#A8A8A8" 
      android:textSize="11sp" /> 

     <TextView 
      android:id="@+id/episodeNumberOfViews" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/noOfViewsText" 
      android:layout_toLeftOf="@+id/noOfViewsText" 
      android:layout_toRightOf="@+id/fav_img" 
      android:ellipsize="none" 
      android:gravity="right" 
      android:paddingRight="5dp" 
      android:singleLine="true" 
      android:text="fsdafasdfsad" 
      android:textColor="#A8A8A8" 
      android:textSize="11sp" /> 

     <ImageView 
      android:id="@+id/fav_img" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/episodeNumberOfViews" 
      android:layout_alignParentLeft="true" 
      android:layout_marginLeft="4dp" 
      android:contentDescription="@string/favourite_title_show" 
      android:src="@drawable/fav_episode" /> 
    </RelativeLayout> 

</FrameLayout> 

單列表項包含2個插曲項目

這是一個包含2情節物品容器

<?xml version="1.0" encoding="utf-8"?> 
    <!-- This container to help emulate a GridView in each ListView item --> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:descendantFocusability="afterDescendants" 
     android:orientation="horizontal" > 

    </LinearLayout> 
+0

你能添加列表項目的快照..以便我們有更好的機會擊中公牛眼..現在我們矇住眼睛.. – Ronnie

+0

看@我更新 – user4o01

+0

你不需要的FrameLayout ..選擇設置爲RelativeLayout的 – Ronnie

回答

2

我面對THI並有一個很好的解決方案看here爲示例代碼

+0

這是一個長期的解決方案。試試這個http://stackoverflow.com/a/13087240/1097940 – user1097940

0

我假設你使用的是一個ListView適配器,在這個適配器中,你可以用一個自定義佈局來爲兩個FrameLayouts充填左右佈局的不同ID。如果不是 - 這是一個解決方案。

在ListView適配器中,添加一個全局int selectedRowId = -1和short leftRight = -1(0表示左邊,1表示右邊)。在你的getView方法中,當構造convertView時,檢查是否存在== selectedRowId。如果是 - 檢查是否爲0或1,這會給你選擇的項目,你可以操縱它。 然後將onClickListener添加到每個FrameLayout,其中storeRatingId = position,leftRight = 0或1根據選擇並調用notifyDataSetChanged()。

2

爲您的列表視圖設置@android:listSelector="@null"。然後爲列表項的各個子視圖設置選擇器。

同時在列表項上設置android:descendantFocusability="afterDescendants"並在集情節項上設置android:duplicateParentState="false"

+0

請現在看我的更新沒我做到了正確的 – user4o01

+0

你能不能幫我沒有onItemClickListener ???請 – user4o01

+0

嘗試'機器人:duplicateParentState =「假」'上的插曲項根 – Ronnie

4

我不是很確定前景,但我實際上做的是使用listview。然後在適配器我設置兩個相對佈局列表中的每一行,這裏是我的屬性列表:

<ListView 
android:id="@+id/seccion_list" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:divider="@null" 
android:dividerHeight="0dp"/> 

在我的適配器我設定的佈局加載的每一行,這裏是在第一相對佈局該行中的第一幀:

<RelativeLayout 
     android:id="@+id/primerContenedor" 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/seccion_3_imagen_height" 
     android:layout_marginLeft="3dip" 
     android:layout_marginRight="3dip" 
     android:layout_marginTop="5dip" 
     android:layout_weight="1" 
     android:clickable="true" 
     android:focusable="true" 
     android:background="@drawable/layout_selector"> 

所以bassically我做的是設置相對佈局可點擊和可聚焦的真實屬性,並定義一個選擇:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:drawable="@color/blue"/> 
    <item android:state_pressed="true" android:drawable="@color/blue"/> 
    <item android:drawable="@color/grey" /> 
</selector> 
+0

雅我加入可點擊和可聚焦的屬性,嘗試你的解決方案到我的親愛的平鋪然後它的作品,謝謝你 – edisonthk

+0

簡單的和有益的 –

+0

我只需要點擊和壓制,似乎是列表視圖帶走點擊或東西....反正把可點擊每個孩子的列表視圖中。 – adrian

相關問題