2016-11-04 5 views
0

Ich habe meinen Code für Sie vereinfacht, um es besser zu verstehen. Ich habe MyAdapter und MyActivity arbeiten beide perfekt.Wie Sie eine weitere Aktivität implementieren Listener implementieren

class MyAdapter extends RecyclerView... { 
    ... 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
    ... 

    holder.mImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((Listener) context).onSelected(object); 
      } 
     }); 
    } 
    ... 
} 

class MyActivity implements MyAdapter.Listener { 
    ... 

    @Override 
    public void onSelected(Object object) { 
     // do things with object here 
    } 
    ... 
} 

Ich möchte meine andere Tätigkeit machen MyAnotherActivityMyAdapter.Listener implementieren. Wenn ich meine App ausführen und auf mein Objekt klicke, wird ein außer Kraft gesetztes onSelected() einfach ignoriert.

public class MyAnotherActivity implements MyAdapter.Listener { 
    ... 
    @Override 
    public void onSelected(Object object) { 
     Log.e("MyAnotherActivity", "This text doesn't shows"); 
    } 
    ... 
} 
+0

Does 'MyAnotherActivity' eine Instanz von' MyAdapter' verwenden? Sind Sie sicher, dass die Einstellung korrekt ist, ähnlich wie bei MyActivity? – drhr

+0

'MyAnotherActivity' ist vollständig von' MyActivity' getrennt. Ich denke du hast den Code zu sehr vereinfacht. –

Antwort

0

Die verwendete Listener Implementierung hängt von den context Parametern MyAdapter Konstruktor übergeben. Weil Sie in dieser Zeile ((Listener) context).onSelected(object); das Feld context der MyAdapter-Klasse in Listener implementieren. Wenn Sie den Konstruktor der MyAdapter aufrufen, müssen Sie den Kontext übergeben.

public class MyAnotherActivity implements MyAdapter.Listener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     MyAdapter adapter = new MyAdapter(this /*Context of MyAnotherActivity*/, ...); 
     ... 
    } 
} 
0

Wenn Sie Methoden innerhalb einer Klasse (nicht nur Aktivität) implementieren möchten, können Sie EventBus, eine leichte Bibliothek für Nachrichten und Ereignisse, das um verwenden.

Es ist sehr einfach zu implementieren und die Code-Beispiele finden Sie auf dem Weg helfen http://greenrobot.org/eventbus/

Verwandte Themen