Java 如何在单击时将图像或路径从Recyclerview传递到下一个活动,以便显示图像完整视图?
我真的不知道怎么做。我尝试了一些教程,但没有为我工作。。。我已经用很多方法做过了,但是做不到 这是我的回收袋Java 如何在单击时将图像或路径从Recyclerview传递到下一个活动,以便显示图像完整视图?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我真的不知道怎么做。我尝试了一些教程,但没有为我工作。。。我已经用很多方法做过了,但是做不到 这是我的回收袋 public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{ public TextView countryName; public ImageView countryPhoto; String s; Bitmap image; public Recy
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView countryName;
public ImageView countryPhoto;
String s;
Bitmap image;
public RecyclerViewHolders(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
countryPhoto = (ImageView)itemView.findViewById(R.id.country_photo);
}
@Override public void onClick(View view) {
Intent imageIntent = new Intent(view.getContext(),GalleryFullImage.class);
imageIntent.putExtra("id",getAdapterPosition());
view.getContext().startActivity(imageIntent);
Toast.makeText(view.getContext(), "Clicked Country Position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
}}
这是我的Recyclerview适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private ArrayList<String> arrayList;
private Context context;
public RecyclerViewAdapter(Context context, ArrayList<String> itemList) {
this.arrayList = itemList;
this.context = context;
}
@Override
public long getItemId(int position) {
return position;
}
@Override public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_item, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
@Override public void onBindViewHolder(RecyclerViewHolders holder, int position) {
Bitmap bitmap = BitmapFactory.decodeFile(arrayList.get(position));
holder.countryPhoto.setImageBitmap(bitmap);
}
@Override public int getItemCount() {
return this.arrayList.size();
}}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私有ArrayList ArrayList;
私人语境;
公共RecycleServiceAdapter(上下文,ArrayList itemList){
this.arrayList=itemList;
this.context=上下文;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@重写CreateViewHolder上的公共RecycleServiceWholders(视图组父级,int-viewType){
View layoutView=LayoutInflater.from(parent.getContext()).flate(R.layout.gallery_项,空);
RecyclerViewWholders rcv=新的RecyclerViewWholders(布局视图);
返回rcv;
}
@覆盖BindViewHolder上的公共void(RecyclerViewHolder,int位置){
位图Bitmap=BitmapFactory.decodeFile(arrayList.get(position));
holder.countryPhoto.setImageBitmap(位图);
}
@重写公共int getItemCount(){
返回此.arrayList.size();
}}
这是我的厨房活动
public class GalleryActivity extends AppCompatActivity {
ArrayList<String> stringList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activty_gallery);
setTitle("Gallery");
stringList = new ArrayList<>();
// Be sure that this file is exist !!
String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Country";
File targetDirector = new File(targetPath);
File[] files = targetDirector.listFiles();
try
{
Arrays.sort( files, new Comparator()
{
public int compare(Object o1, Object o2) {
if (((File)o1).lastModified() > ((File)o2).lastModified()) {
return -1;
} else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
return +1;
} else {
return 0;
}
}
});
for (File file : files) {
stringList.add(file.getAbsolutePath());
}
}catch (Exception e)
{
Log.e("Sort Error", e.getMessage());
}
RecyclerView rView = (RecyclerView)findViewById(R.id.my_recycler_view);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2);
rView.setHasFixedSize(true);
rView.setLayoutManager(layoutManager);
RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(getApplicationContext(), stringList);
rView.setAdapter(rcAdapter);
}
公共类GalleryActivity扩展了AppCompatActivity{
ArrayList字符串列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.Activity_gallery);
片名(“画廊”);
stringList=新的ArrayList();
//确保此文件存在!!
字符串targetPath=Environment.getExternalStorageDirectory().getAbsolutePath()+“/Country”;
文件targetDirector=新文件(targetPath);
File[]files=targetDirector.listFiles();
尝试
{
Arrays.sort(文件,新的Comparator()
{
公共整数比较(对象o1、对象o2){
如果(((文件)o1.lastModified()>((文件)o2.lastModified()){
返回-1;
}else if(((文件)o1.lastModified()<((文件)o2.lastModified()){
返回+1;
}否则{
返回0;
}
}
});
用于(文件:文件){
添加(file.getAbsolutePath());
}
}捕获(例外e)
{
Log.e(“排序错误”,e.getMessage());
}
RecyclerView rView=(RecyclerView)findViewById(R.id.my\u recycler\u视图);
RecycleView.LayoutManager LayoutManager=新的GridLayoutManager(getApplicationContext(),2);
rView.setHasFixedSize(真);
rView.setLayoutManager(layoutManager);
RecycleServiceAdapter rcAdapter=新的RecycleServiceAdapter(getApplicationContext(),stringList);
rView.setAdapter(rcAdapter);
}
}由于您是从
onBindViewHolder
中的文件加载位图,因此您可以在onClick
中传递路径,然后在下一个活动中再次对其进行解码。在您的情况下,这可能需要做一些工作,因为您的视图持有者
是与您的RecyclerView分开定义的,因此它无法访问您的数据集。首先,移动ViewHolder
,使其成为RecyclerView
的静态嵌套类。大概是这样的:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolders>
private ArrayList<String> arrayList;
....
public static class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{
....
@Override
public void onClick(View view) {
Intent intent = new Intent(...);
intent.putExtra("path",arrayList.get(getAdapterPosition());
/* send intent*/
}
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter
私有ArrayList ArrayList;
....
公共静态类RecyclerViewWholders扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
....
@凌驾
公共void onClick(视图){
意向意向=新意向(…);
intent.putExtra(“path”,arrayList.get(getAdapterPosition());
/*发送意图*/
}
}
您只需在viewholder中应用onClickListener,在integer中获取单击的适配器位置,并在下一个全屏活动中传递它
这是完整的代码,希望对您有所帮助
main活动
public class MainActivity extends AppCompatActivity {
private final Integer image_ids[] = {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),gridColumnlayout);
recyclerView.setLayoutManager(layoutManager);
ArrayList<CreateList> createLists = prepareData();
MyAdapter adapter = new MyAdapter(getApplicationContext(), createLists);
recyclerView.setAdapter(adapter);
}
private ArrayList<CreateList> prepareData(){
ArrayList<CreateList> theimage = new ArrayList<>();
for(int i = 0; i< 5; i++){
CreateList createList = new CreateList();
createList.setImage_ID(image_ids[i]);
theimage.add(createList);
}
return theimage;
}
}
public class FullScreen extends AppCompatActivity {
private final Integer image_ids[] = {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_screen);
Intent intent = getIntent();
String message = intent.getStringExtra(MyAdapter.EXTRA_MESSAGE);
int position = Integer.parseInt(message);
ImageView imageView = (ImageView) viewItem.findViewById(R.id.imageView);
imageView.setImageResource(image_ids[position]);
}
}
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ArrayList<CreateList> galleryList;
private Context context;
public final static String EXTRA_MESSAGE = "FullScreen Image";
public MyAdapter(Context context, ArrayList<CreateList> galleryList) {
this.galleryList = galleryList;
this.context = context;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.list_item, parent, false));
}
@Override
public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, int i) {
CreateList currentList = galleryList.get(i);
Glide.with(context).load(currentList.getImage_ID()).centerCrop().crossFade().into(viewHolder.img);
viewHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = viewHolder.getAdapterPosition();
String stringID = Integer.valueOf(pos).toString();
Intent intent = new Intent(MyAdapter.this.context, FullScreen.class);
intent.putExtra(EXTRA_MESSAGE, stringID);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView img;
public ViewHolder(View view) {
super(view);
img = (ImageView) view.findViewById(R.id.image);
}
}
list_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="170dp"
android:scaleType="fitXY"
android:id="@+id/image"/>
</RelativeLayout>
您的图像是在drawables文件夹中还是从internet加载?我使用的是存储在设备上的文件夹中的图像我不知道设备图像,但如果图像在drawables文件夹中,我可以给出如何将图像全屏传递到下一个活动的解决方案,希望您可以进行更改然后是否回收服务Wholders.class residRecycleServiceAdapter.class中的es???忘记下一页上显示的图像,是否侦听单击事件?您好,我正在使用我的方法获取图像的位置。如何在FullimageActivity中使用该位置显示全屏图像?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="170dp"
android:scaleType="fitXY"
android:id="@+id/image"/>
</RelativeLayout>