我有ActivityCourses和ActivityNewCourse。 ActivityCourses包括用户制作的自定义课程的列表(recyclerview),而ActivityNewCourse显然是用户制作这些自定义课程的活动。

ActivityNewCourse包含原始数据(课程名称和孔数)
这些是我传递给ActivityCourses的数据,并在其recyclerview中在那里创建新项目(因此,新项目名称是从ActivityNewCourse传递的课程名称)。

我的问题是ActivityNewCourse还包含recyclerview,并且显然包含唯一的项目。我需要从ActivityNewCourse中获取所有这些项目,并在同一项目中将它们存储(未显示),然后在ActivityCourses中发送原始数据。

我试图在NewCourseAdapter中使用接口,以将这些项目从ActivityNewCourse recyclerview传递到ActivityCourses项目,但是问题是我需要所有这些项目,而不仅是1.,还有那个按钮“ Save Course”,该用户单击可明显地保存ActivityNewCourse中所有数据,这些数据位于这些项目所在的recyclerview之外。

这是我的新课程适配器

public class NewCourseAdapter extends RecyclerView.Adapter<NewCourseAdapter.NewCourseViewHolder> {
    private ArrayList<NewCourseItem> mNewCourseList;
    private OnItemClickListener mListener;

    public interface OnItemClickListener {
        void onMinusClick(int position);
        void onPlusClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }

    public static class NewCourseViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView1, mTextView2;
        public ImageView mImageView1, mImageView2;

        public NewCourseViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
            super(itemView);
            mTextView1 = itemView.findViewById(R.id.hole_number);
            mTextView2 = itemView.findViewById(R.id.par_number);
            mImageView1 = itemView.findViewById(R.id.item_minus_btn);
            mImageView2 = itemView.findViewById(R.id.item_plus_btn);

            mImageView1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null) {
                        int position = getAdapterPosition();

                        if (position != RecyclerView.NO_POSITION) {
                            listener.onMinusClick(position);
                        }
                    }
                }
            });

            mImageView2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null) {
                        int position = getAdapterPosition();

                        if (position != RecyclerView.NO_POSITION) {
                            listener.onPlusClick(position);
                        }
                    }
                }
            });
        }
    }

    public NewCourseAdapter(ArrayList<NewCourseItem> newCourseList) {
        mNewCourseList = newCourseList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull NewCourseViewHolder holder, int position) {
        NewCourseItem currentItem = mNewCourseList.get(position);

        holder.mTextView1.setText(currentItem.getText1());
        holder.mTextView2.setText(currentItem.getText2());
        holder.mImageView1.setImageResource(currentItem.getImageMinus());
        holder.mImageView2.setImageResource(currentItem.getImagePlus());
    }

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


在这里,我如何将原始数据从ACTIVITYNEWCOURSE传递给ACTIVITYCOURES

save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            courseName = findViewById(R.id.course_name_input);
            number = findViewById(R.id.number_of_holes_number);
            String intentCourseName = courseName.getText().toString().trim();
            String holeNumber = number.getText().toString().trim();

            Intent intent = new Intent(ActivityNewCourse.this, ActivityCourses.class);
            intent.putExtra("COURSENAME", intentCourseName);
            intent.putExtra("HOLENUMBER", holeNumber);
            startActivity(intent);
        }
    });


这里的活动课程如何获取数据

public void addItem() {
    if (getIntent().getStringExtra("COURSENAME") != null) {
        mCourselist.add(new CoursesItem(getIntent().getStringExtra("COURSENAME"), "Holes:", getIntent().getStringExtra("HOLENUMBER"), R.drawable.ic_delete));
    }
}


我不确定这段代码是否有帮助...
单击保存按钮后,我能以某种方式从ActivityNewCourse发送整个数组列表吗?我不知道,我有点死胡同,我不知道该怎么办,因此在这种情况下如何做的任何建议都将有所帮助...

最佳答案

您是否尝试过使用intent.putStringArrayListExtra("ARRAYNAME", arrayName);
尝试将数据放入ArrayList并像这样发送:

Intent intent = new Intent(ActivityNewCourse.this, ActivityCourses.class);
intent.putStringArrayListExtra("ARRAYNAME", arrayName);
startActivity(intent);


并像这样检索它:

ArrayList<String> listOfData = getIntent().getStringArrayListExtra("ARRAYNAME");


希望能帮助到你。

更新

使用序列化:
首先将NewCourseItem扩展到Serializable,然后:

Bundle bundle = new Bundle();
bundle.putSerializable("KEYNAME", new NewCourseItem("str1", "str2", "imglink", "imglink"));
intent.putExtras(bundle);
startActivity(intent);


像这样检索它:

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
NewCourseItem item = (NewCourseItem)bundle.getSerializable("KEYNAME");

09-27 05:31