【问题标题】:How can I import text from item to DialogFragment TextView?如何将文本从项目导入 DialogFragment TextView?
【发布时间】:2020-12-16 19:58:16
【问题描述】:

RecyclerView 包含带有文本的组件,我需要通过单击具有文本(例如“Chess”)的组件,DialogFragment 打开并将来自RecyclerView 组件的文本“Chess”传输到TextView 在这个 DialogFragment 里面。

为了从我的 item 布局文件中获取密钥,我写了这个:

   Bundle bundle = new Bundle();
            bundle.putString("item", String.valueOf(dialogSRS));
            dialogSRS.setArguments(bundle);

但是需要在DialogFragment 中写入什么内容才能将我们的文本传输到那里?

我在DialogFragment 中写了以下内容,但它不起作用

public class DialogSkatingRinkSchedule extends DialogFragment{
    TextView number_srs_2;
    TextView start_srs_2;
    TextView end_srs_2;
    TextView cost_srs_2_1;
    TextView cost_srs_2_2;

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

        number_srs_2 = view.findViewById(R.id.number_srs_2);
        start_srs_2 = view.findViewById(R.id.start_srs_2);
        end_srs_2 = view.findViewById(R.id.end_srs_2);
        cost_srs_2_1 = view.findViewById(R.id.cost_srs_2_1);
        cost_srs_2_2 = view.findViewById(R.id.cost_srs_2_2);
        
        Bundle getArguments = new Bundle();
        number_srs_2 = (TextView) getArguments.getSerializable("item");
        return view;
    }
}

我的适配器

public class AdapterSkatingRinkSchedule extends RecyclerView.Adapter<AdapterSkatingRinkSchedule.SkatingRinkScheduleViewHolder> {
    public ArrayList<ItemSkatingRinkSchedule> mSkatingRinkScheduleList;
    public List<ItemSkatingRinkSchedule> mSearch;
    private AppCompatActivity mActivity;

    public AdapterSkatingRinkSchedule(ArrayList<ItemSkatingRinkSchedule> SkatingRinkScheduleList) {
        mSkatingRinkScheduleList = SkatingRinkScheduleList;
        mSearch = new ArrayList(mSkatingRinkScheduleList);
    }

    @NonNull
    @Override
    public SkatingRinkScheduleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_srs, parent, false);
        return new SkatingRinkScheduleViewHolder(v);
    }

    public static class SkatingRinkScheduleViewHolder extends RecyclerView.ViewHolder {
        public TextView number_srs, start_time_srs, end_time_srs, cost_1_srs, cost_2_srs;
        public TextView number_srs_2;
        public LinearLayout ll_main;

        public SkatingRinkScheduleViewHolder(View itemView) {
            super(itemView);
            number_srs = itemView.findViewById(R.id.number_srs);
            start_time_srs = itemView.findViewById(R.id.start_time_srs);
            end_time_srs = itemView.findViewById(R.id.end_time_srs);
            cost_1_srs = itemView.findViewById(R.id.cost_1_srs);
            cost_2_srs = itemView.findViewById(R.id.cost_2_srs);
            ll_main = itemView.findViewById(R.id.ll_main);
        }
    }

    @SuppressLint("LongLogTag")
    @Override
    public void onBindViewHolder(SkatingRinkScheduleViewHolder holder, int position) {
        ItemSkatingRinkSchedule currentItem = mSkatingRinkScheduleList.get(position);
        holder.number_srs.setText(currentItem.get_session_number());
        holder.start_time_srs.setText(currentItem.get_session_start());
        holder.end_time_srs.setText(currentItem.get_session_end());
        holder.cost_1_srs.setText(currentItem.get_weekdays());
        holder.cost_2_srs.setText(currentItem.get_weekends_and_holidays());

        holder.ll_main.setOnClickListener(v -> {
            DialogSkatingRinkSchedule dialogSRS = new DialogSkatingRinkSchedule();
            dialogSRS.show(((AppCompatActivity) v.getContext()).getSupportFragmentManager(), "item");
            Bundle bundle = new Bundle();
            bundle.putString("item", String.valueOf(dialogSRS));
            dialogSRS.setArguments(bundle);
        });
        holder.getAdapterPosition();
    }

    @Override
    public int getItemCount() {
        return mSkatingRinkScheduleList.size();
    }
}

【问题讨论】:

    标签: java android android-recyclerview android-adapter


    【解决方案1】:

    您可以通过调用方法getArguments() 访问FragmentDialogFragment 的参数Bundle。既然你之前写了一个String

    bundle.putString("item", String.valueOf(dialogSRS));

    您应该使用getString("item") 检索该值。然后您可以使用 TextView 显示来自 Bundle 的文本,如下所示:

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_skatingrinkschedule, container, false);
    
        number_srs_2 = view.findViewById(R.id.number_srs_2);
    
        // assign other Views like before  
            
        Bundle args = getArguments();
        String myText = args.getString("item");
        number_srs_2.setText(myText);
            
        return view;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      相关资源
      最近更新 更多