2013-06-22 108 views
2

我使用以下代碼捕獲gridview項目單元格上的單擊。這工作正常。使用Spinner處理GridView單元格中的單擊事件

grid_main.setAdapter(new ImageAdapter(this)); 
grid_main.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    } 
}); 

然後,我在GridView單元格內添加了一個Spinner對象。現在,我可以點擊Spinner對象,但包含的gridview單元格不再響應點擊。我假設Spinner偵聽器正在替換gridview偵聽器。 gridview和spinner的監聽者都能很好地工作,但是我一起遇到了問題。我需要能夠點擊兩者。下面是微調代碼:

final Spinner spinner = (Spinner) v.findViewById(R.id.driver_list); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(DispatchMonitorCalls.this, 
android.R.layout.simple_spinner_item, driverlist_name); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> arg0, View arg1, 
    int arg2, long arg3) { 
    } 
@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 
} 
}); 

下面是佈局的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/driverrow" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="left" 
    android:gravity="left" > 

    <TextView 
     android:id="@+id/row_locationtype" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="10dip" 
     android:layout_alignParentTop="true"   
     android:text="Empty" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/row_timestamp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/row_locationtype"   
     android:layout_below="@+id/row_locationtype" 
     android:text="Empty" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <TextView 
     android:id="@+id/row_status" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/row_locationtype"   
     android:layout_below="@+id/row_timestamp" 
     android:text="Empty" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textColor="#ff8080" /> 

    <Spinner 
     android:id="@+id/driver_list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/row_locationtype"   
     android:layout_below="@+id/row_status" 
     android:paddingBottom="20dp" /> 

</RelativeLayout> 

預先感謝您。

+0

如果你不能解決這個問題,你可能想嘗試一個醜陋的方法。爲Spinner創建一個onItemClickListener,它簡單地調用GridView項目的onItemClickListener。 –

+0

單擊單元格通常會打開另一個屏幕,其中包含詳細信息(超過單元格視圖中提供的幾行)。微調只是一個最常用的功能的快捷方式(他們從列表中選擇一個名稱,並對其進行操作)。如果他們採取了該行動,則在完成工作時不必打開附加視圖。如果我將微調器放在另一個屏幕(詳細視圖)中,那麼我可能會遇到另一個問題,因爲該屏幕還包含一個偵聽器。 – user2512069

+0

這似乎是一個常見問題,但我沒有找到與此問題的線索。 – user2512069

回答

1

你需要調用「blocksDecendants」你的相對佈局,因爲微調是可以點擊,它偷走了你的觀點的焦點,因而你的「點擊事件」就不會飛走

試試這個:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/driverrow" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="left" 
    android:descendantFocusability="blocksDescendants" //<-- add this line, and your click event will be responded 

android:gravity="left" > 

<TextView 
    android:id="@+id/row_locationtype" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="10dip" 
    android:layout_alignParentTop="true"   
    android:text="Empty" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/row_timestamp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/row_locationtype"   
    android:layout_below="@+id/row_locationtype" 
    android:text="Empty" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

<TextView 
    android:id="@+id/row_status" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/row_locationtype"   
    android:layout_below="@+id/row_timestamp" 
    android:text="Empty" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="#ff8080" /> 

<Spinner 
    android:id="@+id/driver_list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/row_locationtype"   
    android:layout_below="@+id/row_status" 
    android:paddingBottom="20dp" /> 

相關問題