我已經看到很多人都有這個問題,但提供給他們的解決方案(比如把佈局放在另一個佈局中)不起作用。所以我決定上傳我自己的代碼,希望有人知道它有什麼問題。我有每行2個按鈕(subtract_button & ADD_BUTTON),即使用以下適配器類顯示一個列表視圖:在列表視圖按鈕點擊,日誌顯示:「ViewPostImeInputStage ACTION_DOWN」
public class AdapterSIUsed2 extends CursorAdapter implements View.OnClickListener {
private RowViewHolder rowView = new RowViewHolder();
public static class RowViewHolder {
public TextView name,used,category,amount;
public Button subtract,add;
public int position;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case (rowView.add.getId()):
// Do something
Log.d("Button clicked","add");
return;
case (rowView.subtract.getId()):
Log.d("Button clicked","subtract");
return;
}
}
public AdapterSIUsed2(Context context, Cursor cursor) {
super(context, cursor, 0);
}
@Override
public View newView(Context context, Cursor csr, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View listView = inflater.inflate(R.layout.listlayout_shopping_items_used, null);
rowView.name = (TextView) listView.findViewById(R.id.shopping_items_name);
rowView.used = (TextView) listView.findViewById(R.id.shopping_items_used);
rowView.category = (TextView) listView.findViewById(R.id.shopping_items_category);
rowView.amount = (TextView) listView.findViewById(R.id.shopping_items_amount);
rowView.subtract = (Button) listView.findViewById(R.id.subtract_button);
rowView.add = (Button) listView.findViewById(R.id.shopping_items_add_button);
rowView.position = csr.getPosition();
rowView.subtract.setOnClickListener(this);
rowView.add.setOnClickListener(this);
listView.setTag(rowView);
rowView.name.setTag(rowView);
rowView.used.setTag(rowView);
rowView.category.setTag(rowView);
rowView.amount.setTag(rowView);
return listView;
}
@Override
public void bindView(View view, Context context, Cursor csr) {
TextView name = (TextView) view.findViewById(R.id.shopping_items_name);
TextView used = (TextView) view.findViewById(R.id.shopping_items_used);
TextView category = (TextView) view.findViewById(R.id.shopping_items_category);
TextView amount = (TextView) view.findViewById(R.id.shopping_items_amount);
name.setText(csr.getString(csr.getColumnIndex(Constants.SHOPPING_ITEMS_COL_1)));
used.setText(csr.getString(csr.getColumnIndex(Constants.SHOPPING_ITEMS_COL_2)));
category.setText(csr.getString(csr.getColumnIndex(Constants.SHOPPING_ITEMS_COL_3)));
amount.setText(csr.getString(csr.getColumnIndex(Constants.SHOPPING_ITEMS_COL_4)));
Button add = (Button) view.findViewById(R.id.shopping_items_add_button);
add.setOnClickListener(this);
Button subtract = (Button) view.findViewById(R.id.subtract_button);
subtract.setOnClickListener(this);
int pos = csr.getPosition();
add.setTag(pos);
subtract.setTag(pos);
}
奇怪的是,當我點擊添加或減按鈕,在兩種情況下我的日誌顯示以下兩行: d/ViewRootImpl:ViewPostImeInputStage ACTION_DOWN I /條點擊::( ,當我點擊列表中的項目本身,我的日誌只顯示以下行: d/ViewRootImpl:ViewPostImeInputStage ACTION_DOWN
有誰知道這裏發生了什麼,以及如何fi x它?提前致謝!
首先,非常感謝你的回覆我盡我所能明白你在說什麼,我修改了代碼一些方法,但不幸的是沒有成功,在問題是我現在的代碼。在與「案件」的線條,它告訴我「需要不斷表達」,你知道嗎?如何解決這個問題? – BramH
對,我忘了那個。你不能在案例陳述中加入可能會改變的東西 - 它必須是不變的。在這種情況下,只需使用正常的if語句。我會編輯我的帖子,以便更清楚地瞭解如何運作。 – evanklicker
非常好,現在給我的是以下內容:按減按鈕; 「D/ViewRootImpl:ViewPostImeInputStage ACTION_DOWN」和「D/Button clicked:subtract」,按add按鈕; 「ViewPostImeInputStage ACTION_DOWN」和「D/Button clicked:add」,在列表視圖項中按其他位置; 「D/ViewRootImpl:ViewPostImeInputStage ACTION_DOWN」。所以它現在可以識別按鈕。我希望它仍然給ACTION_DOWN的事實並不重要,你知道它是否會發生? – BramH