[英]Android: Attaching multiple click listeners to Button?
當我正在創建一個庫時,我想使用該庫(一種分析點擊跟蹤庫)跟蹤來自應用程序的按鈕點擊。 所以我嘗試了很多東西,但這些都對我不起作用。 我瀏覽了下面的鏈接,我知道我們可以使用復合模式添加多個偵聽器。
請在這里幫助我實現我的要求。
這是我嘗試過的代碼
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");
}
}
}
試試這個方法:
在MainActivity
的onCreate
和另一個 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.