2011-03-02 70 views
1

我有一个ListView,每行都包含按钮。我不想为每个按钮分配它自己的侦听器对象,因为它会创建很多对象。但问题是如何确定单击按钮时的行号或上下文信息?确定此行中单击按钮时的行号

+1

你有没有考虑过为行上的点击做一个监听器,而不是在里面放一个按钮?因为在这种情况下,更容易理解哪个行被点击并执行不同的动作 – scambione 2011-03-02 09:27:47

回答

5

每个视图(包括按钮)通过其setId(int)方法可以 “确定”。

点击后,您将看到一个View.OnClickListener.onCLick(view)。只需提取ID,你就知道这是哪个按钮。

当创建一个按钮:

button.setId(1); 

当这个按钮被点击:

button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     int id = view.getId(); 
     // do something with the Id 
    } 
}); 

更新:答案是基于@Octavian Damiean的评论更新:鉴定意见setId()应用来代替setTag()

+1

'setTag()'不应该用于识别。标签在层次结构中不必是唯一的。 'setId()'应该用于识别。 – 2011-03-02 09:45:55

+0

嗯,你是对的。那么setTag'可以用于这个,但这不是它的任务。我正在更新答案。谢谢。 – 2011-03-02 09:50:35

+0

这没有错,但也不是最佳实践。 – 2011-03-02 09:54:20

0

使用

listview..setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int rowNumber, 
        long arg3) { 
       // TODO Auto-generated method stub 

      } 
     }); 

我们可以得到单击行

+0

他没有单击行,而是在行内的Button上单击。 – 2011-03-02 09:39:34

+0

但我有按钮里面的项目,用户点击它 – damluar 2011-03-02 09:40:06

相关问题