目前我正在尝试正常构建相册应用程序,我可以在
recyclerview
中显示我所有的250 jpg图像,但我需要显示在新活动imageview
中点击的每个图像的完整图像大小。
我试图通过 Intent 将数据从
recyclerview
传递到新活动 imageview
但它不起作用(应用程序只是崩溃)
我的适配器
public class myAdapter extends RecyclerView.Adapter <myAdapter.myViewHolder> {
Context context;
ArrayList<tdfImageItem>tdfImageItems;
public myAdapter(Context context, ArrayList<tdfImageItem> tdfImageItems) {
this.context = context;
this.tdfImageItems = tdfImageItems;
}
@NonNull
@Override
public myAdapter.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new myViewHolder(LayoutInflater.from(context).inflate(R.layout.tdf_image_item_layout,parent,false));
}
@Override
public void onBindViewHolder(@NonNull myAdapter.myViewHolder holder, int position) {
int data = tdfImageItems.get(position).getTdfImageItem();
holder.imageView.setImageResource(data.getTdfImageItem());
/* all my photos are successfully uploaded in to recyclerview. */
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,MainActivity2.class);
intent.putExtra("haile",data);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return tdfImageItems.size();
}
public class myViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public myViewHolder(@NonNull View itemView, ImageView imageView) {
super(itemView);
this.imageView = imageView;
}
public myViewHolder(@NonNull View itemView) {
super(itemView);
imageView=itemView.findViewById(R.id.image_view);
}
}
}
`MainActivity`
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
List<tdfImageItem> tdfImageItems = new ArrayList<>();
tdfImageItems.add(new tdfImageItem(R.drawable.tdf1));
/*.all 250 R.drawable.tdf photos */
tdfImageItems.add(new tdfImageItem(R.drawable.tdf250));
recyclerView.setLayoutManager(new GridLayoutManager(this,2));
recyclerView.setAdapter(new myAdaper(getApplicationContext(), (ArrayList<tdfImageItem>) tdfImageItems));
}
}
public class MainActivity2 extends AppCompatActivity {
ImageView imageView2;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
imageView2 = findViewById(R.id.image_view2);
int values = getIntent().getIntExtra("haile",0);
imageView2.setImageResource(values);
}
}
`MainActivity2.xml`
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<ImageView
android:id="@+id/image_view3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/tdf"
android:contentDescription="@string/image_description"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.463" />
</androidx.constraintlayout.widget.ConstraintLayout>
根据您提供的代码,您在尝试获取图像资源 ID 的 myAdapter 类中似乎有错字。您当前正在调用 data.getTdfImageItem(),但您应该调用 data,因为它已经是表示图像资源 ID 的整数。
这是您的适配器的更正代码:
public class myAdapter extends RecyclerView.Adapter<myAdapter.myViewHolder> {
Context context;
ArrayList<tdfImageItem> tdfImageItems;
public myAdapter(Context context, ArrayList<tdfImageItem> tdfImageItems) {
this.context = context;
this.tdfImageItems = tdfImageItems;
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new myViewHolder(LayoutInflater.from(context).inflate(R.layout.tdf_image_item_layout, parent, false));
}
@Override
public void onBindViewHolder(@NonNull myViewHolder holder, int position) {
int data = tdfImageItems.get(position).getTdfImageItem();
holder.imageView.setImageResource(data);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MainActivity2.class);
intent.putExtra("haile", data);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return tdfImageItems.size();
}
public class myViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public myViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
}
}
}
在您的MainActivity2中,您还尝试访问ID为image_view3而不是image_view2的ImageView。这可能是您的应用程序崩溃的另一个原因。这是更正后的activity_main2.xml:
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<ImageView
android:id="@+id/image_view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:contentDescription="@string/image_description"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.463" />
</androidx.constraintlayout.widget.ConstraintLayout>
通过这些更正,您的应用程序应该能够将图像资源 ID 传递给 MainActivity2 并在 ImageView 中显示全尺寸图像。