2017-08-10 90 views
0

我已經看到很多人都有這個問題,但提供給他們的解決方案(比如把佈局放在另一個佈局中)不起作用。所以我決定上傳我自己的代碼,希望有人知道它有什麼問題。我有每行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它?提前致謝!

回答

0

ACTION_DOWN只是表示按了某些東西。這與ACTION_UP有關,這意味着有些東西不再被按下。

顯然,您所按的按鈕是您在bindView中設置的按鈕。目前還不清楚爲什麼當你點擊列表項目本身時會得到這種行爲;它看起來並不像您在單元格本身或任何父類ViewGroup上設置任何onClickListeners。您可能需要仔細檢查並確保您的佈局ID是它們應該是的。這也可能是因爲使用這個作爲適配器會使事情變得糟糕。

看起來您正在從您的onClick方法獲得正確的行爲,並且從接口實現中覆蓋。即使它提供了額外的信息,它也會記錄下你要求的內容(「項目點擊::(」)。我建議使用它,然後改變日誌以使用Log.d代替(Log.d專門用於調試目的)。也可以做這樣的事情:

@Override 
    public void onClick(View v) { 
     if (v.getId() == rowView.add.getId()) { 
      //do something; 
      return; 
     if (v.getId() == rowView.subtract.getId()) { 
      //do something; 
      return; 
     } 
    } 
}); 

,然後你只是做

rowView.add.setOnClickListener(this); 
rowView.subtract.setOnClickListener(this); 
+0

首先,非常感謝你的回覆我盡我所能明白你在說什麼,我修改了代碼一些方法,但不幸的是沒有成功,在問題是我現在的代碼。在與「案件」的線條,它告訴我「需要不斷表達」,你知道嗎?如何解決這個問題? – BramH

+0

對,我忘了那個。你不能在案例陳述中加入可能會改變的東西 - 它必須是不變的。在這種情況下,只需使用正常的if語句。我會編輯我的帖子,以便更清楚地瞭解如何運作。 – evanklicker

+0

非常好,現在給我的是以下內容:按減按鈕; 「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

相關問題