2016-11-04 123 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/