簡體   English   中英

Android:將多個單擊偵聽器附加到按鈕?

[英]Android: Attaching multiple click listeners to Button?

當我正在創建一個庫時,我想使用該庫(一種分析點擊跟蹤庫)跟蹤來自應用程序的按鈕點擊。 所以我嘗試了很多東西,但這些都對我不起作用。 我瀏覽了下面的鏈接,我知道我們可以使用復合模式添加多個偵聽器。

將多個偵聽器附加到 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);
        }
    });



}

}

另一個 class

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

}

試試這個方法:

MainActivityonCreate和另一個 class 的onCreate中添加以下內容:

Clicklistener class 設為singleton以便它隨時包含單個 object。

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

MainActivity按鈕的onClick中添加以下內容:

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

刪除ClickListener OnClick方法中的 for 循環。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM