I am trying to create an image slider with onClickListener using viewpager2. I have created 6 image sliders using viewpager2. I also created 6 different Activity for those sliders. How can I assign those Activity to their respective sliders, so that when someone click on any specific image slider it will open that assigned Activity. Please help...
Here is my code-
CampaignCarouselAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
public class CampaignCarouselAdapter extends RecyclerView.Adapter<CampaignCarouselAdapter.CampaignCarouselViewHolder> {
ArrayList<CampaignItem> mList;
Context context;
public CampaignCarouselAdapter(Context context, ArrayList<CampaignItem> mList) {
this.mList = mList;
this.context = context;
}
@NonNull
@Override
public CampaignCarouselViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new CampaignCarouselViewHolder(
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_container_campaign,parent,false)
);
}
@Override
public void onBindViewHolder(@NonNull CampaignCarouselViewHolder holder, int position) {
CampaignItem currentItem = mList.get(position);
String imageUrl = currentItem.getImageUrl();
Picasso.get().load(imageUrl).resize(1920,1080).centerCrop().into(holder.image);
}
@Override
public int getItemCount() {
return mList.size();
}
static class CampaignCarouselViewHolder extends RecyclerView.ViewHolder {
private ImageView image;
CampaignCarouselViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.campaign_image);
}
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*Carousel Starts*/
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference root = db.getReference().child("campaign");
CampaignCarouselAdapter adapter;
ArrayList<CampaignItem> list;
list = new ArrayList<>();
adapter = new CampaignCarouselAdapter(this, list);
ViewPager2 campaignViewPager = findViewById(R.id.campaign_viewPager);
//Get Data from FireBase Database
root.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
CampaignItem campaignItem = dataSnapshot.getValue(CampaignItem.class);
list.add(campaignItem);
}
campaignViewPager.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
campaignViewPager.setClipToPadding(false);
campaignViewPager.setClipChildren(false);
campaignViewPager.setOffscreenPageLimit(3);
campaignViewPager.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
compositePageTransformer.addTransformer(new MarginPageTransformer(40));
compositePageTransformer.addTransformer(new ViewPager2.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
float r = 1 - Math.abs(position);
page.setScaleY(0.95f + r * 0.05f);
}
});
campaignViewPager.setPageTransformer(compositePageTransformer);
/*Carousel Ends*/
}
}
It seem you can setOnclickListener in onCreateViewHolder,i suggest using eventbus to communicate with tow components
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.