我有一个活动和两个片段,片段A和片段B。在它的适配器(MoviereCyclerAdapter)中,我有一个接口,该接口将列的ID单击回到片段A。
这是适配器中的接口:
private MovieClickedListener movieClickedListener;
public interface MovieClickedListener{
void onCLicked(int Id);
}
public MovieRecyclerAdapter(MovieClickedListener listener){
this.movieClickedListener = listener;
}
我在我的片段类中实现了这一点,以检索数据。
implements MovieRecyclerAdapter.MovieClickedListener
我现在有数据。这是我的问题,我需要将其传递给片段B。我知道我可以实现另一个在片段A和我的活动之间传达的接口,将其传递到那里,然后在我的活动中将其检索并将ID传递给FragmentB。
我想知道这是否是正确的策略,或者是否有一种更有效的方法可以从Fragmenta中的RecyClerview获取单击ID到Fragment B?
?我尝试直接在活动中而不是Fragmenta中实现Recyclerview的接口
这是活动中使用简单日志语句的ClickedListener。
public class MainActivity extends AppCompatActivity implements MovieRecyclerAdapter.MovieClickedListener { @Override
public void onCLicked(int Id) {
Log.v("TAG","In MainActivity")
}}
如果我这样做的话,请在活动而不是片段中实现clickedlistener,当我在片段中实例化recyclerview时,我再也无法将"此"作为构造函数参数传递给适配器。
movieRecyclerAdapter = new MovieRecyclerAdapter(this);
我已经尝试了所有类型的上下文,它无法使用
到您问题的最后一部分:
如果要在活动中实现界面,则可以在片段中添加此代码:
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof MovieRecyclerAdapter.MovieClickedListener){
// save the interface in a field
callback = (MovieRecyclerAdapter.MovieClickedListener) context;
}
}
然后,您可以这样启动适配器:
movieRecyclerAdapter = new MovieRecyclerAdapter(callback);
现在我建议:
如果我正确地解开您,则要单击回收瓶的项目,然后打开/切换到另一个片段。在我的应用中,我有类似的问题,并这样解决了:
我有一个循环系统,其中项目代表电影对象。我总是使用电影ID。真实的电影对象由Singleton Manager班级管理。因此,如果我单击一个项目,我会创建一个新的意图,然后将电影ID传递给新活动。如果我想访问电影对象,我必须调用manager.getInstance().getMovie(movieid);
之类的东西。因此,我使用传递的Movieid访问真实对象。
您可以将活动回调作为参数以这种方式:
movieRecyclerAdapter = new MovieRecyclerAdapter((MovieRecyclerAdapter.MovieClickedListener) getActivity());
您是否在片段或捆绑中的活动之间传递了侦听器?如果是,它将在接收器侧创建另一个侦听器的实例。
现在,在您的情况下,您需要检查可观察和观察者。https://stackoverflow.com/a/40627973/3728591
让fragmentB实现了movieclickedListener
您的活动都有两个片段的实例,即活动中的fraga和fragb
在活动呼叫中为
fragA.setMovieClickedListener(fragB);
在Fragmenta中添加方法
public void setMovieClickedListener(MovieClickedListener listener){
adapter.setMovieClickedListener(listner);
}
现在,您的适配器有FragmentB的听众
注意:适配器应首先在fragmenta