2013-07-23 145 views
2

假设我有一个ListView,其中的项目是包含三个按钮的布局。当用户点击5号项目的第二个按钮时,我怎样才能有效地知道?在Android的ListView项目视图中处理点击事件

还有,第二个问题:如果我有一个适配器与该getView方法,我该如何处理activity类中的click事件而不是适配器?

干杯,

+0

入住这可能会回答你的问题 http://stackoverflow.com/questions/17813864/android-listview-style-and-colors –

回答

4

实际上有很多方法可以做到这一点。

  • 您可以为每个按钮创建一个Click适配器,以知道它连接到哪个按钮。
  • 您可以在点击处理程序识别并采取行动的每个按钮上放置一个唯一标记。
  • 您可以建立一个ArrayList,将每个Button链接到一个代码,告诉点击处理程序要做什么......如同Alexander说的那样,您可以为处理按钮的ListView创建一个自定义适配器。如果您使用此方法,那么你需要在

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
        // Create all the Views, Buttons, etc 
    
        // Create the click handlers: 
        button1.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View v) { 
          doButtonOneClickActions(position); 
         } 
        }); 
    } 
    
    private void doButtonOneClickActions(int rowNumber) { 
        // Do the actions for Button one in row rowNumber (starts at zero) 
    } 
    

它,而取决于你的代码(和你的首选编码风格)的休息去哪个解决方案创造了onclick处理..

+0

谢谢尼尔。就是这样,我很担心编码风格......我不知道哪个是最好的方法。谢谢你的答案。 –

+0

请让我澄清一件事。如果我有一个带有getView方法的适配器,如何处理activity类中的click事件而不是适配器?谢谢 –

+0

@DídacPérez只是在你的活动中创建一个监听器,并在初始化之后将它传递给你的适配器,但在将它分配给listview之前。 – AlexSanchez

2

为了这个目的,你应该更好地创造了ListView自定义适配器。然后覆盖getView

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
//here you define your button's click events. 
//use position parameter to get actual position of current row layout in 
// the list 
} 
+0

感谢Four的答案。我实际上已经实现了一个自定义适配器和getView方法,但我确实需要知道如何以有效的方式处理列表视图中的事件。 –

1

您应该创建自定义适配器并覆盖getView(int position, View convertView, ViewGroup parent)方法,并在那里引用您的按钮并将它们设置为onClickListeners。你有列表行的position,所以你有你需要的一切。

1

多好啊,你把三个按钮放在列表项中,就像我现在正在做的一样!我也在寻找一种编码风格(不一定是解决方案)。无论如何,我将着眼于:

  1. 性能
  2. 重新可用性
  3. 松耦合(但高度内聚)

我将委托的点击处理程序来应定义外部实例并使用以下线连接到适配器:

public class MyListAdapter extends BaseAdapter { 
    View.OnClickListener listener = null; 

    public View getView(...) { 
     buttonA.setOnClickListener(listener); 
     buttonB.setOnClickListener(listener); 
     buttonC.setOnClickListener(listener); 
    } 
    public void setItemClickListener(View.OnClickListener listener) { 
     this.listener = listener; 
    } 
} 

听众的工作是识别哪个按钮单击。更多的问题必须解决,例如,将数据从MyListAdapter传递给侦听器,并将侦听器代码简化为应用程序逻辑的一部分。

相关问题