Как получить Положение данных по клику RecyclerView для просмотра Pager Swipe? - PullRequest
0 голосов
/ 12 января 2019

Я использую Viewpager для слайдера и первоначально Recyclerview ... Когда я загружаю изображение с сервера в переработчик, это делается ... Теперь, что я хочу сделать, когда кто-нибудь нажимает на конкретный элемент, он должен быть открыт в секунду активность, в которой я использую ViewPager .. пример: когда я нажимаю первый образ, он должен открыть это изображение в viewPager (слайдер) .... А также, когда кто-то проводит пальцем по активности ViewPager, он должен загружать больше изображений .... Код ниже и не знаю, что делать дальше. Пожалуйста, помогите мне.

RecyclerView

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:

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();

        }
    });

  }

MyAdapter:

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

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Если вы загружаете изображения с сервера, и у каждого изображения есть идентификатор, передайте идентификатор в намерение. Когда вы открываете представление, для которого нужно изображение, по которому щелкнули, сделайте сервисный вызов, чтобы получить изображение с сервера, используя его идентификатор.

0 голосов
/ 12 января 2019

Введите свой код здесь, добавьте 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);
        }
    });

Если вы хотите отправить изображение или идентификатор, содержащиеся в этой строке, добавьте intent.putExtra() после создания намерения.

Например, если я хочу отобразить изображение во втором задании, вставленном неправильно

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

В SecondActivity впервые получают ресурс изображения из намерения

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

Затем отобразить изображение в режиме просмотра изображения

...