如何使另一个活动实现监听器

时间:2016-11-04 22:13:27

标签: android

我简化了我的代码,以便您更好地理解它。 我MyAdapterMyActivity工作得非常完美。

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");
    }
    ...
}

2 个答案:

答案 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/