如何使用 FirebaseRecyclerAdapter 将数据片段发送到片段

How can I send the data fragment to fragment with FirebaseRecyclerAdapter

我想把LibraryFragment中的String数据传给LibrarySongFragment

图书馆片段:

public class LibraryFragment extends Fragment {

    private FirebaseRecyclerAdapter mAdapter;

    @Nullable
    @Override
    public New onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ...
        mAdapter = new LibraryAdapter(options, context);
        recyclerView.setAdapter(mAdapter);
    }
}

库适配器:

public class LibraryAdapter extends FirebaseRecyclerAdapter<MyModel, LibraryAdapter.MyViewHolder> {
    ...
    public class MyViewHolder extends RecyclerView.ViewHolder {
        public MyViewHolder(View view) {
            super(view);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String title = getItem(getAdapterPosition()).getTitle();
                    ((FragmentActivity) context).getSupportFragmentManager().beginTransaction()
                        .addToBackStack(null).replace(R.id.library_coordinator, new LibrarySongFragment()).commit();
                }
            });
        }
    }
}

我想在 LibraryAdapter 中发送 MyViewHolder 中的标题。你可以看到"String title = getItem(getAdpaterPosition()).getTitle();"。只需发送到 LibrarySongFragment 并 post 它在 fragment_song_library.xml TextView 中。

您只需创建数据包并在片段对象中设置参数。我修改了你的代码。请参考

public class MyViewHolder extends RecyclerView.ViewHolder {
        public MyViewHolder(View view) {
            super(view);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    String title = getItem(getAdapterPosition()).getTitle();

                    FragmentManager fragmentManager = ((Activity)context).getSupportFragmentManager();
                    Fragment fragment;

                    LibrarySongFragment librarySongFragment = new LibrarySongFragment();
                    Bundle bundle = new Bundle();
                    bundle.putString("KeyTitle",title);
                    librarySongFragment.setArguments(bundle);


                    fragmentManager.beginTransaction()
                            .addToBackStack(null).replace(R.id.library_coordinator, librarySongFragment).commit();
                }
            });
        }
    }

创建界面 在您要发送数据的片段中

SendMessage SM;

public interface SendMessage{
    void Senddata(String message,Boolean sent);
}

将此方法覆盖到同一片段

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        SM = (SendMessage) getActivity();
    } catch (ClassCastException e) {
        throw new ClassCastException("Error in retrieving data. Please try again");
    }
}

将此片段实现到包含这些片段的 activity

public class Activity extends AppCompatActivity implements sendfragment.SendMessage

将消息覆盖到 activity

 @Override
public void Senddata(String message,Boolean sent) {
    fragtwo f = (fragtwo) getSupportFragmentManager().findFragmentByTag(tag);
    if(sent==true){
        Toast.makeText(this, "data transfered", Toast.LENGTH_SHORT).show();
        f.displaydata(message);
    }
}

为发送数据创建public方法

public void displaydata(String massage){
    String massageformat="received data is "+massage;
}

这是 android

中片段之间的通信方式