我有以下非常簡單的使用ListView的測試程序。我創建一個ListView並將其設置爲內容視圖。我設置了一個提供行的ListAdapter。有30行,每行包含一個LinearLayout ViewGroup。在該ViewGroup中,我放置了一個TextView和一個Button。當我運行該程序時,我發現我無法選擇列表中的行。但是,我可以滾動列表並單擊按鈕。使用Android,如何從包含按鈕控件的ListView中選擇行
如果我從LinearLayout中刪除按鈕(以便它只包含TextView),那麼我可以選擇列表中的行。我想 喜歡能夠在我單獨的行視圖上有按鈕,並且仍然能夠選擇列表中的行。在另一個論壇上,有人說這是可能的,但我對如何實現這一目標感到不知所措。
任何人都可以給我一個線索嗎?
謝謝。
public class ListViewTest extends Activity implements ListAdapter
{
int m_count;
DataSetObserver m_observer;
public ListViewTest()
{
m_count = 30;
m_observer = null;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ListView lv = new ListView(this);
lv.setAdapter(this);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
setContentView(lv);
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public int getCount()
{
return m_count;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout vg = new LinearLayout(this);
TextView tv = new TextView(this);
tv.setText("ListItem");
Button bv = new Button(this);
bv.setText("Button");
vg.addView(tv);
vg.addView(bv);
return(vg);
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public void registerDataSetObserver(DataSetObserver observer)
{
m_observer = observer;
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
}
這個問題已經出現了很多次。例如,請參閱http://stackoverflow.com/questions/3611551/textview-and-button-in-each-row-and-onlistitemclick/3611898#3611898。 – 2010-09-24 19:08:16