【问题标题】:How to send data from a adapter class to a fragment?如何将数据从适配器类发送到片段?
【发布时间】:2021-06-25 07:57:51
【问题描述】:

我想将适配器类中的音频文件发送到从片段中的 firebase 数据库中检索到的片段。

这是我的适配器类代码。

recyclerViewAdapter.java

public class recyclerViewAdapter extends FirebaseRecyclerAdapter<model, recyclerViewAdapter.recyclerViewHolder> {

public recyclerViewAdapter(@NonNull FirebaseRecyclerOptions<model> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull recyclerViewAdapter.recyclerViewHolder holder, int position, @NonNull model model) {

    holder.recycler_view_title.setText(model.getTitle());
    Glide.with(holder.recycler_view_image.getContext()).load(model.getImageUrl()).into(holder.recycler_view_image);

    holder.recycler_view_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            AppCompatActivity appCompatActivity = (AppCompatActivity) v.getContext();
            appCompatActivity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DescriptionFragment(model.getTitle(), model.getDescription(), model.getImageUrl(), model.getAudioUrl())).addToBackStack(null).commit();

        }
    });

}

@NonNull
@Override
public recyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row_design, parent, false);

    return new recyclerViewHolder(view);
}

public class recyclerViewHolder extends RecyclerView.ViewHolder {

    private ImageView recycler_view_image;
    private TextView recycler_view_title;

    public recyclerViewHolder(@NonNull View itemView) {
        super(itemView);

        recycler_view_image = itemView.findViewById(R.id.recycler_view_image);
        recycler_view_title = itemView.findViewById(R.id.recycler_view_title);

    }

}

}

【问题讨论】:

标签: java android firebase android-intent


【解决方案1】:

要在adapter 类和fragment 之间发送数据,请使用interface

在适配器类中创建接口

    OnDataSend dataSend;

    public interface OnDataSend {
        void onSend(String audioURL);
    }

    public void OnDataSend(OnDataSend dataSend){
        this.dataSend = dataSend;
    }
   

要发送数据,请将其放入适配器类

    //To send data call 
    dataSend.onSend(/*Pass you data*/);

在片段中接收数据

    recyclerViewAdapter recyclerViewAdapter = new recyclerViewAdapter(/*...*/);
    recyclerViewAdapter.OnDataSend(new recyclerViewAdapter.OnDataSend() {
        @Override
        public void onSend(String audioURL) {

          //data received...

        }
    });

详细解答

public class recyclerViewAdapter extends FirebaseRecyclerAdapter<model, recyclerViewAdapter.recyclerViewHolder> {

    OnDataSend dataSend;

    public recyclerViewAdapter(@NonNull FirebaseRecyclerOptions<model> options) {
        super(options);
    }

    public void OnDataSend(OnDataSend dataSend) {
        this.dataSend = dataSend;
    }

    @Override
    protected void onBindViewHolder(@NonNull recyclerViewAdapter.recyclerViewHolder holder, int position, @NonNull model model) {

        holder.recycler_view_title.setText(model.getTitle());
        Glide.with(holder.recycler_view_image.getContext()).load(model.getImageUrl()).into(holder.recycler_view_image);

        holder.recycler_view_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AppCompatActivity appCompatActivity = (AppCompatActivity) v.getContext();
                appCompatActivity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DescriptionFragment(model.getTitle(), model.getDescription(), model.getImageUrl(), model.getAudioUrl())).addToBackStack(null).commit();

                
                //send data
                dataSend.onSend(model.getAudioUrl());
                
                
            }
        });

    }

    @NonNull
    @Override
    public recyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row_design, parent, false);

        return new recyclerViewHolder(view);
    }

    public interface OnDataSend {
        void onSend(String audioURL);
    }

    public class recyclerViewHolder extends RecyclerView.ViewHolder {

        private ImageView recycler_view_image;
        private TextView recycler_view_title;

        public recyclerViewHolder(@NonNull View itemView) {
            super(itemView);

            recycler_view_image = itemView.findViewById(R.id.recycler_view_image);
            recycler_view_title = itemView.findViewById(R.id.recycler_view_title);

        }

    }
}

【讨论】:

  • 首先感谢 Marsad 的回答,但我有疑问,我们不需要更改片段 java 代码中的任何内容吗?
  • @AryanYadav 请检查我的更新答案
  • 好的,但是您只告诉如何发送数据,请告诉如何获取该数据。
  • @AryanYadav 我把那个代码放在我的答案中(想再看看)。
  • 亲爱的,请通过FirestoreRecyclerOptions&lt;/*model*/&gt; options = new FirestoreRecyclerOptions.Builder&lt;/*model*/&gt;() .setQuery(/*query*/, /*model.class here*/) .build();... = new recyclerViewAdapter(options);
猜你喜欢
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多