2013-02-03 86 views
2

好吧我一直在撕掉我的頭髮過去幾個小時在這裏試圖找出爲什麼我的自定義列表視圖適配器無法正常使用OnItemClickListener。我有一個TextView,我使用DrawableLeft屬性在ListView內部的textview的左側繪製圖像。現在在我的textview中,我將android:focusable和android:focusableInTouchMode以及android:clickable all都設置爲false,並且在我的listview的根目錄中,我將android:descendantFocusability設置爲blocksDescendants,因爲這些是遇到此確切問題時的常見問題。現在,這裏是佈局文件,我會用:ListView自定義OnItemClickListener不被調用

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/menu" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#363636" 
android:dividerHeight="1dp" 
android:divider="@drawable/menudivider" 
android:paddingLeft="@dimen/list_padding" 
android:paddingRight="@dimen/list_padding" 
android:descendantFocusability="blocksDescendants" /> 

這是我的TextView佈局:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/menu_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="#fff" 
    android:typeface="sans" 
    android:textSize="20sp" 
    android:drawablePadding="10dp" 
    android:padding="7dp" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:clickable="false" /> 

我設置DrawableLeft圖像編程在我的派生BaseAdapter類我getView函數中。至於說我實現它的OnItemClickListener功能活動去有點像這樣:

public class ActivityBase extends Activity implements OnItemClickListener { 

private ListView mSlidinglist = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 

       mSlidinglist = (ListView)findViewById(R.id.menu); 
       ArrayList<MenuItem> items = new ArrayList<MenuItem>(); 
       items.add(new MenuItem("Test",R.drawable.test)); 
       CustomAdapter adapter = new CustomAdapter(this,items); 

       mSlidinglist.setAdapter(adapter); 
       mSlidinglist.setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Toast.makeText(this, "Clicked", Toast.LENGTH_LONG).show(); 

    } 
    } 

這裏是我的自定義適配器:

public class CustomAdapter extends BaseAdapter 
    { 
     private ArrayList<MenuItem> items; 
     private Context mContext; 

     public CustomAdapter(Context context, ArrayList<MenuItem> items) 
     { 
     this.items = items; 
     this.mContext = context; 
     } 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View v = convertView; 
    if(v == null) { 
     LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     v = vi.inflate(R.layout.list_row, null); 
    } 

    final MenuItem l = items.get(position); 

    if(l != null) { 
     TextView title = (TextView) v.findViewById(R.id.menu_list); 

     title.setText(l.getTitle()); 
     title.setCompoundDrawablesWithIntrinsicBounds(l.getImageId(), 0, 0, 0); 
    } 
    return v; 
} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    return items.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

}

MenuItem類是剛setters和getters爲我需要的字段...

我不能得到這個開火,我不明白爲什麼任何幫助表示讚賞如果需要更多的代碼只是讓我k現在只是不想發佈一切。 BaseAdapter的子類非常簡單,只需使用setCompoundDrawablesWithIntrinsicBounds設置TextView和DrawableLeft字段的文本。如果有人可以幫助,將不勝感激。

+1

你爲什麼要添加的android:點擊=你的textview爲false? –

+0

您是否嘗試過調試代碼並檢查問題? – GrIsHu

+0

@Puru甚至不關心,如果我啓用它,所以讓它禁用 –

回答

0

好吧,我剛剛測試了代碼,編輯了一下,現在它正在工作。

我已經改變了:

if(l != null) { 
    TextView title = (TextView) v; // insted of findView 

    title.setText(l.getTitle()); 
    title.setCompoundDrawablesWithIntrinsicBounds(l.getImageId(), 0, 0, 0); 
} 
+0

只是自己應用了這些更改,而我在OnItemClick上還沒有收到任何其他重大更改? –

+0

你確定你在onCreate方法調用 –

+0

某些時刻設置ContentView是的,我很肯定CustomAdapter正確顯示所有列表行,他們只是不可點擊我只是嘗試在onStart()中放置setOnItemClickListener以確保但仍然沒有效果。 –

0

嘗試改變活動擴展ListActivity .. 什麼是在logcat的錯誤?

+0

我不能,我必須在我用於基本活動的庫中擴展此活動。作者提供了一個例子,儘管他正在使用片段,但對他來說工作正常。 https://github.com/jfeinstein10/SlidingMenu/tree/master/example/src/com/slidingmenu/example –

0

奇怪的是,當我刪除處理可聚焦性和可點擊性的屬性時,我得到了我的工作。我不明白,但看看它是否適合你。在你的代碼

0

應用這些孩子的意見

android:focusable="false" 
android:focusableInTouchMode="false" 

應用此父佈局

android:descendantFocusability="blocksDescendants" 

添加以下兩行:

mSlidinglist.setClickable(true) 
mSlidinglist.setEnable(true) 
相關問題