Android:将多个单击侦听器附加到按钮?
当我创建一个库时,我想使用该库跟踪应用程序中的按钮点击(类似于分析点击跟踪库)。所以我尝试了很多东西,但都不管用。我已经浏览了下面的链接,我知道我们可以使用复合模式添加多个侦听器 请帮我达到我的要求 这是我试过的代码Android:将多个单击侦听器附加到按钮?,android,android-layout,android-fragments,android-button,Android,Android Layout,Android Fragments,Android Button,当我创建一个库时,我想使用该库跟踪应用程序中的按钮点击(类似于分析点击跟踪库)。所以我尝试了很多东西,但都不管用。我已经浏览了下面的链接,我知道我们可以使用复合模式添加多个侦听器 请帮我达到我的要求 这是我试过的代码 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.on
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_demo);
final FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frameFragment, new FragmentA());
fragmentTransaction.commit();
Button button = findViewById(R.id.buttonDemo);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("test", "Button Click 1");
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("test", "Button Click 2");
/*Field field = null;
try {
Log.e("test", "CLASS NAME: "+v.getClass().getName());
field = Class.forName(v.getClass().getName()).getDeclaredField("mOnClickListener");
View.OnClickListener retrievedListener = (View.OnClickListener) field.get(v);
Log.e("test", ""+retrievedListener.toString());
} catch (NoSuchFieldException e) {
e.printStackTrace();
Log.e("test", "Exception: NoSuchFieldException");
} catch (ClassNotFoundException e) {
e.printStackTrace();
Log.e("test", "Exception: ClassNotFoundException");
} catch (IllegalAccessException e) {
e.printStackTrace();
Log.e("test", "Exception: IllegalAccessException");
}*/
ClickListener listenerCollector = new ClickListener();
listenerCollector.addOnclickListener(this);
}
});
}
}
另一类
public class ClickListener implements View.OnClickListener {
private ArrayList<View.OnClickListener> clickListeners = new ArrayList<>();
public void addOnclickListener(View.OnClickListener listener){
clickListeners.add(listener);
}
@Override
public void onClick(View v) {
for(View.OnClickListener l : clickListeners){
l.onClick(v);
Log.e("test", "onclick from composite click");
}
}
public类ClickListener实现View.OnClickListener{
private ArrayList clickListeners=新建ArrayList();
public void addOnclickListener(View.OnClickListener侦听器){
单击侦听器。添加(侦听器);
}
@凌驾
公共void onClick(视图v){
对于(View.OnClickListener l:clickListeners){
l、 onClick(v);
Log.e(“test”,“从复合单击中单击”);
}
}
}尝试以下方法:
在另一类的main活动的onCreate
和onCreate
中添加以下内容:
使单击Listener
class asingleton
,以便它随时包含单个对象
ClickListener listenerCollector = new ClickListener.getInstance();
listenerCollector.addOnclickListener(this);
在MainActivity
中单击按钮的onClick
,添加以下内容:
for (ClickListener listener: listenerCollector.clickListeners){
listener.onClick();
}
删除ClickListener OnClick
方法中的for循环
希望这有帮助。尝试以下方法:
在另一类的main活动的onCreate
和onCreate
中添加以下内容:
使单击Listener
class asingleton
,以便它随时包含单个对象
ClickListener listenerCollector = new ClickListener.getInstance();
listenerCollector.addOnclickListener(this);
在MainActivity
中单击按钮的onClick
,添加以下内容:
for (ClickListener listener: listenerCollector.clickListeners){
listener.onClick();
}
删除ClickListener OnClick
方法中的for循环
希望这能有所帮助。如果您可以添加您想要实现的内容,那么将很容易提供帮助。@Suresh您可以发布您的代码吗?此链接是否回答了您的问题@Keshav1234,我已经浏览了上面的链接,我不清楚。@Suresh好的,请将您从其他资源中尝试和理解的内容发布代码。如果您可以添加,您试图实现的内容将很容易得到帮助。@Suresh您可以发布您的代码吗?此链接是否回答了您的问题@Keshav1234,我已经浏览了上面的链接,我不清楚。@Suresh ok,请发布您从其他资源中尝试和理解的代码。我想在我的Android库类(即非活动类)中跟踪此单击侦听器。它会工作吗?图书馆可以有一个活动。你可以通过实现并使用它来构建一个模块。我想在我的Android库类(即不是活动类)中跟踪这个点击监听器。它会工作吗?图书馆可以有一个活动。您可以通过实现并使用它来构建一个模块。