大家好,我是安卓开发的新手,我发现回收视图很令人困惑。我目前正在尝试将一个活动的信息传递给另一个活动,但在我的第二个活动中,只有卡片视图显示。有人能帮我吗?非常感谢!
我的布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
app:cardBackgroundColor="#808080"
tools:context=".ChosenExerciseActivity"
android:elevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical">
<ImageView
android:id="@+id/selected_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:src="@drawable/ic_launcher_background"></ImageView>
<TextView
android:id="@+id/selected_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Exercise Name"
android:textStyle="bold"
android:layout_marginTop="5dp"
android:layout_below="@id/selected_image"></TextView>
<TextView
android:id="@+id/selected_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/selected_name"
android:layout_marginTop="7dp"
android:text="Exercise description"
android:textStyle="italic"
android:layout_marginStart="5dp"></TextView>
</LinearLayout>
</androidx.cardview.widget.CardView>
我的第二项活动
public class ChosenExerciseActivity extends AppCompatActivity {
TextView exercise_name, exercise_description;
ImageView exercise_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chosen_exercise);
exercise_name = findViewById(R.id.selected_name);
exercise_description = findViewById(R.id.selected_description);
exercise_image = findViewById(R.id.selected_image);
Intent intent = getIntent();
exercise_name.setText(intent.getStringExtra("selected_name"));
exercise_description.setText(intent.getStringExtra("selected_description"));
exercise_image.setImageResource(intent.getIntExtra("selected_image", 0));
//System.out.println(exercise_name.getText().toString());
}
}
我的适配器类
/**
* Class responsible for
*/
public class ExerciseAdapter extends RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder> {
private ArrayList<Exercise> exercisesArray = new ArrayList<>();
Context context;
public ExerciseAdapter(ArrayList<Exercise> exercisesArray, Context context){
this.exercisesArray = exercisesArray;
this.context = context;
} //constructor
@NonNull
@Override
public ExerciseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.homepage_design, parent, false); //inflate the layout xml file and display it on the parent
return new ExerciseViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ExerciseViewHolder holder, int position) {
holder.bind(exercisesArray.get(position)); //bind method comes from the ProjectViewHolder inner class
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), ChosenExerciseActivity.class);
intent.putExtra( "text_view_exercise_name", exercisesArray.get(position).getExercise_name());
intent.putExtra( "text_view_exercise_description", exercisesArray.get(position).getExercise_description());
intent.putExtra( "text_view_exercise_description", exercisesArray.get(position).getExercise_image());
v.getContext().startActivity(intent); //you cannot start an activity without a context(this) so that you a Context object which will refer to the activity you wish to retrieve the information
}
});
}
@Override
public int getItemCount() {
return exercisesArray.size();
}
class ExerciseViewHolder extends RecyclerView.ViewHolder {
TextView text_view_exercise_name, text_view_exercise_description;
ImageView image_view_exercise_image;
CardView card_view_exercises;
public ExerciseViewHolder(@NonNull View itemView){
super(itemView);
//itemView.setOnClickListener(this); //set the screen to capture the users click
card_view_exercises = itemView.findViewById(R.id.card_view_parent);
text_view_exercise_name = itemView.findViewById(R.id.text_view_exercise_name);
text_view_exercise_description = itemView.findViewById(R.id.text_view_exercise_description);
image_view_exercise_image = itemView.findViewById(R.id.image_view_exercise_image);
}
public void bind(Exercise exercise) {
text_view_exercise_name.setText(exercise.getExercise_name());
text_view_exercise_description.setText(exercise.getExercise_description());
image_view_exercise_image.setImageResource(exercise.getExercise_image());
}
// @Override
// public void onClick(View v) {
// int position = getAdapterPosition();
// Exercise chosenExercise = exercisesArray.get(position);
//
// }
}
}
在此处输入图像描述
1在适配器中创建一个接口来处理点击侦听器在你的活动中登记那些听众。
2将意向键固定为有重复的密钥
Intent intent = new Intent(v.getContext(), ChosenExerciseActivity.class);
intent.putExtra( "selected_name", exercisesArray.get(position).getExercise_name());
intent.putExtra( "selected_description", exercisesArray.get(position).getExercise_description());
intent.putExtra( "selected_image", exercisesArray.get(position).getExercise_image());
v.getContext().startActivity(intent);
如果你声明意向密钥常量会更好,比如
public static int INTENT_EXERCISE_NAME = "INTENT_EXERCISE_NAME"
用法:
intent.putExtra(INTENT_EXERCISE_NAME, exercisesArray.get(position).getExercise_name());