私はEventBus lib
を実装して、どのクラスやフラグメントからもデータを取得し、メソッドをサブスクライブして即座に変更されたデータを取得します...しかし、次のエラーメッセージ:サブスクライバクラスとそのスーパークラスには@subscribeアノテーションを持つパブリックメソッドがありません
org.greenrobot.eventbus.EventBusException:加入者クラスjava.lang.Booleanのとそのスーパークラスは、私はgithubのような方法をサブスクライブしている@Subscribe注釈
とはパブリックメソッドを持っていませんshowed here
コードは、私が唯一
アダプタ
@Override
public void onBindViewHolder(final Holder holder, int position) {
final Category.Items category = list.get(position);
holder.catPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().postSticky(category);
}
}
更新アクティビティここでは必要とされていない残りのコードとして採用するために必要なコードを掲載している
public class ItemFragment extends Fragment {
View view;
String data;
RecyclerView recyclerView;
CategoryAdapter itemAdapter;
List<Category.Items> list;
private String TAG = getClass().getName();
public static ItemFragment newInstance(String detail) {
Bundle args = new Bundle();
ItemFragment fragment = new ItemFragment();
args.putString("data", detail);
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.cat_recy, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
data = getArguments().getString("data");
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getEventBusData(MessageEvent messageEvent) {
if (messageEvent != null) {
Category.Items itemClass = EventBus.getDefault().getStickyEvent(Category.Items.class);
Log.e("eventBus", itemClass.getItem_name() + " " + itemClass.getPrice() + " " + itemClass.getCount());
}
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
スニペットクラス
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getEventBusData(Items messageEvent) {
if (messageEvent != null) {
Items itemClass = EventBus.getDefault().getStickyEvent(Items.class);
Log.e("eventBus", itemClass.getItem_name() + " " + itemClass.getPrice() + " " + itemClass.getCount());
calculation();
}
}
新しいエラー
org.greenrobot.eventbus.EventBusException: Subscriber class com.icanstudioz.foodpaprica.fragment.ItemFragment already registered to event class com.icanstudioz.foodpaprica.data.Items
を参照する必要があります。https://stackoverflow.com/questions/35874055/eventbus-subscriber-class-and-its-super-classes-have -no-public-methods-with-th/35912503#35912503 – magiccus