我有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");