gpt4 book ai didi

java - 在 fragment 和服务类中使用 Otto

转载 作者:行者123 更新时间:2023-11-30 01:14:08 24 4
gpt4 key购买 nike

我在 Fragment 类中有一个 RecyclerView,我有一个服务类,我想在其中将 Item 添加到我的 RecyclerView 中。问题是我不知道我该怎么做。所以我问过,有人告诉我使用 Otto。现在我存货了,因为它不起作用。也许我的代码有问题,我不知道,这是我第一次使用 Otto

这就是我实现 fragment 类的方式

public static class MyFragment extends Fragment {

RecyclerView recyclerView;
LinearLayoutManager linearLayoutManager;
static TheRecyclerAdapter theRecyclerAdpater;
private List<TheData> theDataList;
public static Bus bus = new Bus(ThreadEnforcer.MAIN);

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.online_devices, container, false);

recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
linearLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);

theDataList = new ArrayList<>();
theRecyclerAdpater = new TheRecyclerAdapter(getActivity().getBaseContext(), theDataList);

recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(theRecyclerAdpater);

bus.register(this); //I already register my fragment
getActivity().startService(new Intent(getActivity(),MyService.class)); //I call the Service

return view;
}

//I already Subscribe, I am expecting to execute this Function but nothings happened
@Subscribe
public void getMessage(String s) {
TheData a = new TheData(s);
theDataList.add(a);
theRecyclerAdpater.notifyDataSetChanged();
}
}

这是我的服务等级

public class ServerHelperService extends Service {
public static Bus bus = new Bus(ThreadEnforcer.MAIN);

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate(){
bus.post("a"); //This where I'm expecting to call the getMessage function in my fragment
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_NOT_STICKY;
}

@Override
public void onDestroy() {
super.onDestroy();
}
}

有谁知道为什么它不起作用?

最佳答案

首先,您必须掌握事件总线的概念。在 Otto doc ,您只能在文本中看到有关事件总线如何工作的技术细节。所以为了解释起见,我们借用 EventBus .这里的图片解释了事件总线是如何工作的: EventBus Description这里有 3 个部分:

  1. 制作人, Activity 的制作人。
  2. 事件,生产者发送的发生的事件。
  3. 订阅者,接收事件的订阅者。

Producer 只能发送事件。所以你只需要发送事件。当然,您可以向事件添加“有效负载”。因此,要发送事件,您可以使用类似的东西:

bus.post(new SampleEvent("Your Data"));

Event 只是一个 pojo 类,像这样:

public class SampleEvent {
private String message;
public SampleEvent(String message) {
this.message = message;
}

public getMessage() {
return message;
}
}

甚至是空白类:

public class BlankEvent {
}

那么你应该订阅以等待和接收事件:

@Subscribe
public void getMessage(SampleEvent event) {
String message = event.getMessage();
// Process the message here.
}

我想,通过阅读这个简单的解释,您将了解您的代码中存在哪些问题。

但我建议你使用 EventBus反而。 OttoBus 现已弃用。不要害怕学习曲线,因为它们共享相同的概念。

关于java - 在 fragment 和服务类中使用 Otto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com