安卓。给按钮附加多个点击监听器?

问题描述 投票:1回答:1

我正在创建一个库,我想使用该库来跟踪应用程序的按钮点击(一种分析点击跟踪库)。所以我尝试了很多方法,但都没有成功。我看了下面的链接,我知道我们可以使用复合模式添加多个监听器。

在android中给视图附加多个听众?

请帮我实现我的要求。

以下是代码,我已经尝试过

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");
    }
}

}

android android-layout android-fragments android-button
1个回答
0
投票

试试这种方式。

添加以下内容 onCreateMainActivityonCreate 另一个类的。

使 Clicklistener 甲级 singleton 以便它随时包含单个对象。

ClickListener listenerCollector = new ClickListener.getInstance();
listenerCollector.addOnclickListener(this);

onClick 您的按钮在 MainActivity 添加以下内容。

for (ClickListener listener: listenerCollector.clickListeners){
      listener.onClick();
}

移除for循环 ClickListener OnClick 方法。

希望对大家有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.