2016-11-04 122 views
0

我简化了我的代码,以便更好地理解它。 我有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"); 
    } 
    ... 
} 
+0

不'MyAnotherActivity'使用'MyAdapter'的实例?你确定设置正确吗,类似于'MyActivity'? – drhr

+0

'MyAnotherActivity'完全独立于'MyActivity'。我想你太简化了代码。 –

回答

0

的使用Listener实现取决于传递给MyAdapter构造的context参数。因为在此行((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*/, ...); 
     ... 
    } 
} 
0

如果你想实现的任何类(不只是性)内的任何方法,你可以使用EventBus,周边的传递消息和事件的轻量级库。

这是很容易实现,代码样本将帮助你前进的道路上 http://greenrobot.org/eventbus/