从 recyclerview 的适配器访问父片段方法
Posted
技术标签:
【中文标题】从 recyclerview 的适配器访问父片段方法【英文标题】:Accessing parent fragments methods from recyclerview's adapter 【发布时间】:2016-03-31 04:35:07 【问题描述】:大家好,我正在尝试从回收器视图适配器类访问片段的几个方法和变量(包含回收器视图)。最简单的方法是传递片段引用以及创建它的适配器。但我不认为传递创建适配器的完整适配器参考是一个好方法。
我在我的项目中使用 RxJava,并使用 PublishSubject 尝试了很多事情,比如在适配器中创建一个主题,调用它的 onNext 执行事件并在片段中订阅该主题,但它没有成功..
因此,任何好的方法都将受到高度赞赏。
TIA...
【问题讨论】:
通过创建一个片段可以实现的接口来使用委托模式怎么样?片段可以使用adapter.setDelegate(this)
之类的东西初始化适配器,并且在适当的时候,适配器可以调用委托上的方法,例如if (delegate != null) delegate.someMethod();
不知道代理的事情,得去看看。此外,由于使用 rxjava,因此已停止使用接口进行通信。
谁能帮我做同样的事情?
【参考方案1】:
我建议在您的应用中引入EventBus - 应用不同组件之间非常优雅的通信方式。
然后它看起来像:
Fragment
:
public class MyFragment extends Fragment
private EventBus eventBus = EventBus.getDefault();
RecyclerViewAdapter viewAdapter;
@Override
public void onAttach(Context context)
super.onAttach(context);
eventBus.register(this);
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_a, container, false);
if (viewAdapter == null)
viewAdapter = new RecyclerViewAdapter(eventBus);
RecyclerView recyclerView = (RecyclerView)rootView.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(viewAdapter);
return rootView;
@SuppressWarnings("unused") // invoked by EventBus
public void onEventMainThread(final DataRefreshedEvent event)
// Do something!
@Override
public void onDetach()
eventBus.unregister(this);
super.onDetach();
Adapter
:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
EventBus eventBus;
public RecyclerViewAdapter(EventBus eventBus)
this.eventBus = eventBus;
void sentSomethingToFragment()
eventBus.post(new DataRefreshedEvent());
.....
事件:public final class DataRefreshedEvent
只是一个注释 - 使用Dagger,它看起来会更好。
希望对你有帮助
【讨论】:
【参考方案2】:我的建议是使用界面方法。 1.创建一个界面。 2. Fragment 应该实现该接口。 3. 将该接口引用传递给适配器。 4.从适配器调用接口方法
这样你就可以在片段和适配器之间进行通信。
【讨论】:
虽然丑陋,但这是最好的答案。叹息。以上是关于从 recyclerview 的适配器访问父片段方法的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数