2012-04-29 34 views
3

我正面臨着這個問題,它使我瘋狂。 我有以下的適配器代碼:當添加onClick監聽器來查看適配器內部時,ListView的listSelector樣式不起作用

private class ListAdaptor extends ArrayAdapter<String> { 
     private ArrayList<String> listVO; 

     public ListAdaptor(Context context, int textViewResourceId, ArrayList<String> items) { 
      super(context, textViewResourceId, items); 
      this.listVO = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       v = ViewGroup.inflate(getContext(), R.layout.list_friends_inflate, null); 
      } 
      String o = listVO.get(position); 
      TextView fullName = (TextView) v.findViewById(R.id.textViewName); 
      fullName.setText(o); 

      v.setOnClickListener(new OnClickListener() {     
       @Override 
       public void onClick(View v) { 
        Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT); 
       } 
      }); 
      /*v.setOnTouchListener(new OnTouchListener() {    
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        Toast.makeText(getApplicationContext(), "test2", Toast.LENGTH_SHORT); 
        return false; 
       } 
      });*/   
      return v; 
     } 
    } 

這個適配器類是一個ListActivity裏面。當我點擊listView的項目時,listSelector風格行爲不會發生。如果我評論onClickListener並點擊它,它就會起作用。如果我取消註釋onTouchListener並點擊該項目,它也可以工作,但我不想要一個onTouch事件,而是一個onClick。

我在適配器正在膨脹的視圖的XML是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp" android:clickable="false" android:focusableInTouchMode="false"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="65dp" 
     android:layout_height="65dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" android:clickable="false" android:focusableInTouchMode="false"/> 

    <TextView 
     android:id="@+id/textViewName" 
     style="@style/TextViewStyleCommon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/imageView1" 
     android:layout_marginBottom="18dp" 
     android:layout_marginLeft="10dp" 
     android:layout_toRightOf="@+id/imageView1" 
     android:textAppearance="?android:attr/textAppearanceMedium" android:clickable="false" android:focusableInTouchMode="false"/> 

    <TextView 
     android:id="@+id/textViewPoints" 
     style="@style/TextViewStyleCommon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textViewName" 
     android:layout_alignBottom="@+id/textViewName" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="10dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" android:clickable="false" android:focusableInTouchMode="false"/> 

</RelativeLayout> 

我知道,有一個與具有在你膨脹的XML可聚焦元素,使得onClick事件工作問題。問題是,我的活動確實工作,但風格行爲不......這是瘋了。

在我styles.xml我:

<style name="MyTheme" parent="android:Theme.Light"> 
     <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowBackground">@drawable/ndp_background</item> 
     <item name="android:windowFrame">@null</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:listViewStyle">@style/MyListView</item> 
    </style> 

    <style name="MyListView" parent="@android:style/Widget.ListView.White"> 
     <item name="android:listSelector">@drawable/list_subject_selector</item> 
     <item name="android:cacheColorHint">@android:color/transparent</item> 
    </style> 

我定義的MyTheme在Android清單應用程序的主題...

有沒有人見過這樣的行爲? 非常感謝, Felipe

+1

爲什麼不使用'onListItemClick'而不是直接將OnClicklistener設置爲您的充氣視圖? – Luksprog 2012-04-29 12:16:13

回答

1

如果你想做一些Listview項目的東西點擊,那麼爲什麼不使用setOnItemClickListener。

list.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
    Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT); 
    }); 
+0

我依賴於來自適配器內部的變量listVO的內容,以便能夠創建一個Intent.d 它能在適配器內部使用onItemClickListener嗎?我目前不保存內存中的列表變量 – 2012-04-29 18:51:48