2017-08-10 105 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

相关问题