2017-10-11 65 views
0

总的Android初学者在这里...每个类都必须拥有自己的OnClickListener吗?

我有一个onClick监听的活动在这个例子:Multiple Buttons `OnClickListener()` android

现在我建立一个监听器在不同的活动浮动操作按钮。我不确定是否可以使用同一个听众,还是每个班级都必须拥有自己的?

ACTIVITY #1 // a regular activity 
public class Requests extends AppCompatActivity implements View.OnClickListener {...} 

ACTIVITY #2 // A RecyclerView, CardView type activity 
public static class MyViewHolder extends RecyclerView.ViewHolder {...} 

我真的很想有一个Listener来处理cardview点击事件,以及浮动操作按钮。

+1

,如果它是只为按钮,可以指定它应该在xml中执行的方法:'andorid:onClick = methodName' – Century

+1

如果这些类具有相同的功能,那么您可以实现相同的OnClickListener,否则您需要实现不同的侦听器以执行差异化nt任务 – Lokesh

+0

@Century我不认为OP在问这个问题。如果您已经读过他要求实现一个侦听器来处理不同点击事件的问题 – Lokesh

回答

2

您可以为多个按钮使用相同的侦听器。如果他们处于不同的活动中,则可以编写一个实现View.OnClickListener的独立类。就像这样:

public class MyButtonListener implements View.OnClickListener { 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

    case R.id.oneButton: 
     // do your code 
     break; 

    case R.id.twoButton: 
     // do your code 
     break; 

    case R.id.threeButton: 
     // do your code 
     break;// default method for handling onClick Events.. 
} 

}

然后你只需要设置你的按钮听众喜欢button.setOnClicklistener(new MyOnClickListener());

如果你的按钮都在做同样的动作,你不会需要的switch-case块。

创建一个单独的监听器类根本不是一个坏主意但是:你应该尝试为每个活动实现一个,以便全面了解按钮操作。

+0

请将此标记为答案,如果它解决了您的问题:) – Pynnie

+0

这种方法对我来说很有意义。但是,你能否解释一下其他的东西......如果一次点击来自卡片视图中的“卡片”,另一次点击来自菜单选项,而第三次来自视图中的按钮,那该怎么办?我不确定所有三个事件源都可以通过'public void onClick(View v)'获得。除非我不理解什么'View v'参考意味着....? – Maxcot

+0

@Maxcot你提到的所有UI元素扩展了'View'类。将在XML文件中指定它们,该文件属于一个活动或作为ListView项目工作。但是,在XML中,您必须为每个元素声明一个唯一的ID,您希望以单独的方式运行。所有这些ID都可以通过'R'类访问。所以可以在onClickListener类中访问它们。希望你可以按照我的解释 – Pynnie

0

您可以使用以下一小段代码片段中的链接下面提到

Handle click item in Recycleview

在此的onClick和onItemClick覆盖监听器可以实现一般都为浮点操作按钮和cardview点击事件位置明智

0

要在不同的视图的单击事件执行相同的操作或ViewGroup中实施OnClickListener匿名类作为

View.OnClickListener mOnClickListener= new View.OnClickListener() { 
@Override public void onClick(View v) { /*do your code */ }}; 

或致电它在你的活动作为

mbutton.setOnClickListener(mOnClickListener); 
    mcardView.setOnClickListener(mOnClickListener); 
相关问题