我简化了我的代码,以便您更好地理解它。
我MyAdapter
和MyActivity
工作得非常完美。
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
}
...
}
我想让我的另一项活动MyAnotherActivity
实施MyAdapter.Listener
。
当我运行我的应用程序并单击我的对象时,重写onSelected()
只是被忽略。
public class MyAnotherActivity implements MyAdapter.Listener {
...
@Override
public void onSelected(Object object) {
Log.e("MyAnotherActivity", "This text doesn't shows");
}
...
}
答案 0 :(得分:0)
使用的Listener
实现取决于传递给context
构造函数的MyAdapter
参数。因为在这一行((Listener) context).onSelected(object);
上,您要将MyAdapter类的context
字段强制转换为Listener
实现。
因此,当您调用MyAdapter
的构造函数时,需要传递MyAnotherActivity
的上下文。
public class MyAnotherActivity implements MyAdapter.Listener {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
MyAdapter adapter = new MyAdapter(this /*Context of MyAnotherActivity*/, ...);
...
}
}
答案 1 :(得分:0)
如果要在任何类(不仅仅是活动)中实现任何方法,可以使用EventBus,一个用于传递消息和事件的轻量级库。
它非常容易实现,代码示例将帮助您一路走来 http://greenrobot.org/eventbus/