【问题标题】:How to get RecyclerView's Clicked data Position to View Pager Swipe?如何获取 RecyclerView 点击数据位置到 Viewpager Swipe?
【发布时间】:2019-01-12 09:22:22
【问题描述】:

我将 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);
}

【问题讨论】:

    标签: android android-recyclerview android-viewpager


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在此处输入代码中,将setOnclickListener 添加到holser.iytemView,然后创建导航到第二个活动的意图,并将此代码添加到onBindViewHolder

      holder.itemView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Log.d(TAG, "onClick: LoadingProfileActivity");
                  Intent intent = new Intent(getContext(), SecondActivity.class);
                  /*
                    Extras
                  */
                  mainActivityContext.startActivity(intent);
              }
          });
      

      如果您想发送包含在此行中的图像或 id,请在创建 Intent 后添加intent.putExtra()

      如果我想在第二个活动中显示图像,则放入

      Intent intent = new Intent(getContext(), SecondActivity.class);
      intent.putExtra("image_url", imageResource);
      

      在 SecondActivity 中首先从 Intent 中获取图像资源

      String imageResouce = getIntent.getStringExtra("image_url");
      

      然后在图像视图中显示图像

      【讨论】:

      • 我这样做了,但是除了包含 ViewPager 之外,没有类似 imageview 的东西可以在第二个活动中显示该图像...让我告诉适配器中的所有内容。那么如何根据您的代码将 Recycler 视图之间的数据传递给该适配器。我知道该代码,但我不明白在这种情况下如何实现。请让我知道,更多关于如何实现这一点。
      • 查看我为你创建的这个项目 [Github Project] (github.com/AshwithJoylan/ScrollImages)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2023-04-04
      • 2018-12-19
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多