2011-11-26 124 views
2

我有一個ListView包含每個項目上的按鈕。 我希望項目點擊會導致列表中的OnItemClick事件觸發, ,因爲該事件包含比按鈕的OnClick事件更多的信息(id,position)。fire OnItem點擊按鈕時點擊listview

這是一個重要的動作列表,這就是爲什麼我需要按鈕,不想要一個普通的項目點擊會導致它觸發(我猜使按鈕可以聚焦會做的伎倆)。

這可能嗎?

回答

-1

嘗試使你自己的適配器的列表。在getView()方法做你的必需品要求。

setListAdapter(new ArrayAdapter<string>(this, R.layout.list_item, strings) { 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
View row; 

if (null == convertView) { 
row = mInflater.inflate(R.layout.list_item, null); 
} else { 
row = convertView; 
} 

Button bt1 = (Button) row.findViewById(android.R.id.bt1); 
bt1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v){ 
     //you will get position and do necessary method 
     } 
}); 

return row; 
} 
}); 
+0

工作(只要我使用最終的變種的位置)。 謝謝。 – Shlomi

+0

你想要哪個ID?你的List項目中有哪些項目? – freshDroid

+0

我的問題實際上比較複雜,因爲有時候我到onClick的位置是錯誤的。但這是另一個問題... – Shlomi

2

行可點擊嗎?根據行是否可點擊,我可能會執行以下操作之一;

  1. 你可以只設置clickable=false上的按鈕,讓觸摸propergate到父,即列表視圖排按鈕是,然後onItemClickListener應通知該行

  2. 您可以設置在該報告上的按鈕位於該行的位置的按鈕標籤(View.setTag(..)),並閱讀了onClickListener

  3. 這個標籤,你可以遵循freshDroid此頁面上提示問題的答案卻是會效率低下因爲您每次創建新的OnClickListener時都會創建/回收視圖,這會導致額外的GC工作。

+0

我這樣工作。 clickable = false按鈕但它不傳播onItemClickListener。爲你做這個方法嗎? –