In meiner Android-Anwendung habe ich eine Aktivität und Adapter für die Listenansicht verwendet, muss meine Erwerbung Adapter-Klasse und Aktivität über Event-Listener mit EventBus kommunizieren, so dass ich erstellt habe zwei Ereignis-Listener-Klassen.Android Event Bus funktioniert nicht mit zwei Event-Listener
Mein Prozess ist:
1) Ich habe eine Schaltfläche in der Aktivität, sollte die Schaltfläche Adapter Klasse kommunizieren.
2) Wenn ich auf Textansicht (Textansicht Widgets der Listenansicht) klicken, sollte die Aktivitätsklasse kommunizieren.
Mit dem folgenden Code funktioniert es für Adapter kommuniziert mit Aktivität, aber Aktivität kommuniziert nicht mit Adapterklasse. Bitte helfen Sie mir bei der Kommunikation für beide Klassen?
Ich habe meine volle Beispielprojekt Code geschrieben:
Aktivitätsklasse:
public class ListMobileActivity extends Activity {....};
private ListView list;
private Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(ListMobileActivity.this);
......
list.setAdapter(adapter);
// Does not communicates with Adapter.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
EventBus.getDefault().post(new TestEvent2("test event"));
}
});
}
public void onEvent(TestFinishedEvent event) {
Log.e("TestFinishEvent ", event.test);
}
}
Adapter Klasse:
public class MobileArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MobileArrayAdapter(Context context, String[] values) {
super(context, R.layout.list_mobile, values);
this.context = context;
this.values = values;
EventBus.getDefault().register(this.context); // registered here.
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_mobile, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
textView.setText(values[position]);
.........
// its works, communicate with Activity
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
EventBus.getDefault().post(new TestFinishedEvent("ssds"));
}
});
return rowView;
}
public void onEvent(TestEvent2 event) {
Log.e("Test event 2 ", event.test);
}
}
Warum haben Sie zwei 'EventBus' Instanzen? – CommonsWare
Bitte sehen Sie meine aktualisierte Frage. –