Поскольку я создаю библиотеку, и я хотел отслеживать нажатия кнопок из приложения, использующего эту библиотеку (разновидность библиотеки отслеживания кликов аналитики). Итак, я перепробовал так много вещей, и это не сработало для меня. Я прошел по ссылке ниже и узнал, что мы можем добавить несколько слушателей, используя составной шаблон.
Присоединение нескольких слушателей к просмотрам в 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");
}
}
}