首页 > 解决方案 > 如何获取 RecyclerView 的点击数据位置以查看寻呼机滑动?

问题描述

我正在将 Viewpager 用于滑块,最初是 Recyclerview ...当我将图像从服务器加载到回收站时,它就完成了...现在我想做的是,当有人点击特定项目时,它应该在第二个活动中打开,其中我使用的 ViewPager.. 示例:当我单击第一个图像时,它应该在 viewPager(slider) 中打开该图像....而且当有人在 ViewPager 的活动上滑动时,它应该加载更多图像....代码在下面并且不要不知道下一步该做什么。请帮我。

回收站视图

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.myViewHolder> {

ArrayList<model> mdata;
Context context;
public  RecyclerViewAdapter(){ }

public RecyclerViewAdapter(ArrayList<model> mdata, Context context) {
    this.mdata = mdata;
    this.context = context;
}

@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
    View view = inflater.inflate(R.layout.item,viewGroup,false);
    return new myViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final myViewHolder holder, int i) {


    Picasso.get().load(mdata.get(holder.getAdapterPosition()).getWallpaper()).into(holder.wallpaper);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        Intent i = new Intent(context,SecondActivity.class);

            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("wallpaperUrl",mdata.get(holder.getAdapterPosition()).getWallpaper());

            context.startActivity(i);

        }
    });



}

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

public  class myViewHolder extends RecyclerView.ViewHolder{

    ImageView wallpaper;
    Button set;

    public myViewHolder(@NonNull View itemView) {
        super(itemView);

        wallpaper = itemView.findViewById(R.id.wallpaper);
        set = itemView.findViewById(R.id.set);
    }
}

具有 ViewPager 的第二个 Activity:

public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);


  btn = findViewById(R.id.setWallpaper);
    mdata = new ArrayList<model>();
 viewPager = findViewById(R.id.viewPager);

    Intent intent = getIntent();

    Integer[] colors_temp ={getResources().getColor(R.color.color1),
            getResources().getColor(R.color.color2),
            getResources().getColor(R.color.color3),
            getResources().getColor(R.color.color4),

    } ;

    colors = colors_temp;

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffSet, int pixels) {
            if (position < adapter.getCount() -1 &&  position <(colors.length) -1){

                viewPager.setBackgroundColor(
                        (Integer) argbEvaluator.evaluate
                                (positionOffSet,
                                        colors[position],
                                        colors[position + 1]));
            }else{
                viewPager.setBackgroundColor(colors[colors.length - 1]);
            }

        }

        @Override
        public void onPageSelected(final int i) {

            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    DownloadImage downloadImage = new DownloadImage();
                    Bitmap bitmap = null;

                    try{

                       bitmap = 
    downloadImage.execute(mdata.get(i).getWallpaper()).get();
                    }catch (Exception e){
                        e.printStackTrace();
                        Toast.makeText(SecondActivity.this, "Something went 
               Wrong! ", Toast.LENGTH_SHORT).show();
                    }

                }
            });

        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

mDatabase = FirebaseDatabase.getInstance();
    mReference = mDatabase.getReference().child("wallpapers");

    mReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){

                model data = dataSnapshot1.getValue(model.class);
                mdata.add(data);

            }

            adapter = new Adapter(mdata,getApplicationContext());

            viewPager.setAdapter(adapter);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            Toast.makeText(SecondActivity.this, "Failed! "+databaseError, 
        Toast.LENGTH_SHORT).show();

        }
    });

  }

我的适配器:

public class Adapter extends PagerAdapter {

ArrayList<model> mdata;
Context context;
LayoutInflater inflater;

public  Adapter(){

}

public Adapter(ArrayList<model> mdata, Context context) {
    this.mdata = mdata;
    this.context = context;
}

@Override
public int getCount() {
    return mdata.size();
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view.equals(o);
}

@NonNull
@Override
public Object instantiateItem(@NonNull final ViewGroup container, final int position) {

    inflater = LayoutInflater.from(context);

    View view = inflater.inflate(R.layout.pager_item,container,false);

    ImageView wallpaper;
    Button btn;

    wallpaper = view.findViewById(R.id.wallpaperImage);

    Picasso.get().load(mdata.get(position).getWallpaper()).into(wallpaper);

    container.addView(view,0);

    return view;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
   container.removeView((View)object);
}

标签: androidandroid-recyclerviewandroid-viewpager

解决方案


如果您从服务器加载图像,并且每个图像都有一个 id,则将 id 传递给意图。当您打开需要单击的图像的视图时,进行服务调用以使用其 ID 从服务器检索图像。


推荐阅读