2014-10-10 119 views
1

在我的應用程序中,我有幾個不同的片段,不同的ListView s,但對於所有他們我想使用相同的空視圖,所以我創建了一個單獨的佈局與空視圖,並將其添加到其他佈局使用使佈局可點擊

<include 
    android:id="@+id/empty" 
    layout="@layout/empty_view"/> 

一切正常,但現在我試圖讓該視圖點擊所以當用戶點擊空的觀點,我可以重新加載ListView,但我不能使它發揮作用。任何想法如何做到這一點?

這是我到目前爲止已經試過:

(empty_view.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:gravity="center"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scaleType="center" 
     android:src="@drawable/error_icon"/> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:textColor="#929292" 
     android:textSize="24sp" 
     android:text="@string/empty_list_error"/> 

</LinearLayout> 

fragment_list.xml

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

    <Spinner 
     android:id="@+id/spinner_filter" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="@dimen/activity_vertical_margin" 
     android:layout_marginLeft="@dimen/activity_vertical_margin" 
     android:layout_gravity="center_horizontal" 
     android:visibility="gone"/> 

    <include 
     android:id="@+id/empty" 
     layout="@layout/empty_view"/> 

    <ProgressBar 
     android:id="@+id/loading_indicator" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:indeterminate="true" 
     style="@android:style/Widget.Holo.ProgressBar.Large"/> 

    <LinearLayout 
     android:id="@+id/list_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/primary_color" 
     android:padding="@dimen/activity_vertical_margin" 
     android:layout_below="@id/spinner_filter" 
     android:visibility="gone"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_weight="5" 
      android:layout_height="wrap_content" 
      android:textColor="@color/white_90pct" 
      android:textAllCaps="true" 
      android:text="@string/subject_indicator"/> 

     <View 
      android:layout_width="1dp" 
      android:layout_height="15dp" 
      android:layout_gravity="center_vertical" 
      android:background="@color/light_color"/> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:gravity="end" 
      android:textColor="@color/white_90pct" 
      android:textAllCaps="true" 
      android:text="@string/grade_indicator"/> 

    </LinearLayout> 

    <ListView 
     android:id="@+id/semesters_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/list_header"/> 

</RelativeLayout> 

Java類(onCreateView)

LinearLayout emptyView = (LinearLayout) view.findViewById(R.id.empty); 
emptyView.setOnClickListener(this); 

我也試過添加接下來屬性的XML,但仍然沒有工作:

android:focusableInTouchMode="true" 
android:focusable="true" 
android:descendantFocusability="blocksDescendants" 
+0

嘗試給予單個項目clickListener並檢查,如 'LinearLayout emptyView =(LinearLayout)view.findViewById(R.id.empty); emptyView.findViewById(R.id.emptyTextView).setOnClickListener(this); emptyView.findViewById(R.id.emptyImageView).setOnClickListener(this);' – Antrromet 2014-10-10 15:46:17

+1

@Antrromet,我有點想避免這種情況,因此我需要添加更多的偵聽器,以便在空視圖佈局中添加更多視圖。這就是爲什麼我想在你的列表視圖中將整個視圖點擊爲'android:clickable =「true」'下的 – 2014-10-10 15:50:59

+0

,設置'android:onClick =「test」'。然後在你的代碼中創建方法'test(View v){}',看看是否被調用。 (把東西放在裏面和斷點)。 Plus刪除此測試的任何編碼偵聽器 – Doomsknight 2014-10-10 15:51:22

回答

0

嘗試emptyView.setOnTouchListener()

你包括empty_view成另一種觀點,即塊後代聚焦性?

因爲你的編輯

你的ListView是在empty_view的頂部和阻塞可點擊。

+0

我只是試過了,但它似乎沒有工作 – 2014-10-10 15:49:05

+0

我編輯了我的問題,並添加了我使用空視圖的片段的完整佈局。你可以檢查有什麼不對嗎?您是否測試了添加空視圖的代碼:'? – 2014-10-10 16:07:09

+1

我測試過這種方法,但是我沒有其他的視圖** ** XML中的empty_view。兄弟姐妹被添加在彼此之上,你將進一步下載XML。 – 2014-10-10 16:13:08

0

由於您已將linearlayout指定爲clickable,因此您只需指定onClick事件的方法。

所以添加您的linearLayouts XML中,onClick屬性如下:(可能太需要focusable

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:onClick="layoutClicked" 
    android:focusable="true" 
    android:gravity="center"> 

然後在你的代碼必須去與它

public void layoutClicked(View v) 
{ 
     // Your code here 
} 
+0

與提供默認的'OnClickListener'不一樣嗎?無論如何,我嘗試過,但沒有奏效。你認爲這與空視圖佈局不是原始佈局的一部分有關嗎?正如我所說的那樣,它使用' 2014-10-10 16:03:26

0

由於該方法您的空視圖會填充其父視圖,請確保您的空視圖的包含標記是其他佈局中的最後一個,因此它將在z順序中位於最頂端。

+0

添加到主佈局中您是對的!顯然有東西阻塞了它,我將佈局移到了xml文件的底部,並解決了它!非常感謝! – 2014-10-10 16:13:32