Je suis encore débutant sur Android dev, je mets en place une nouvelle vue après avoir cliqué sur mon élément de recylerview, mais mon application est mélangée entre kotlin et android car je reçois du code source d'Internet, mais mon projet depuis le début était compilé par kotlin.
// setCreativeViewPagerAdapter\
// Based on Kotlin
fun setCreativeViewPagerAdapter(creativePagerAdapter: CreativePagerAdapter) {
post({
this.creativePagerAdapter = creativePagerAdapter
// Setup adapter for palette manager
paletteCacheManager.setCreativeViewAdapter(creativePagerAdapter)
paletteCacheManager.cachePalettesAroundPositionAsync(0, {
refreshBackgroundColor(0, 0f)
})
// Setup image adapter
creativeImageAdapter.creativePagerAdapter = creativePagerAdapter
creativeHeaderRecycler.layoutManager = LinearLayoutManager(context,
LinearLayoutManager.HORIZONTAL, false)
creativeHeaderRecycler.adapter = creativeImageAdapter
// Setup content adapter
creativeContentAdapter.creativePagerAdapter = creativePagerAdapter
creativeContentViewPager.adapter = creativeContentAdapter
creativeHeaderRecycler.post({ refreshImagesPosition(0f, 0) })
})
}
les exemples de code que j'ai référencés sont utilisés kotlin show nouvelle activité démarrée comme ceci
// Referenced Code
// Based on Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
creativeViewPagerView.setCreativeViewPagerAdapter(NatureCreativePagerAdapter(this))
}
}
notes: createViewPagerView = sont la valeur d'attribut sur l'activité principale xml NatureCreativePagerAdapter = sont l'adaptateur que j'utiliserai
setCreativeViewPagerAdapter = une fonction dans une classe avec le code ci-dessous
// Set New View Adapter
// Based on Java
holder.itemImageView.setOnClickListener(new CustomOnItemClickListener(position, new CustomOnItemClickListener.OnItemClickCallback() {
@Override
public void onItemClicked(View view, int position) {
if(holder.itemNameTextView.getText().equals("Pemerintahan (OPD)")){
//open new intent
else if(holder.itemNameTextView.getText().equals("Pelayanan Publik")){
//open new intent
}
3 Réponses :
Vous devez donner le contexte de votre activité / fragment au constructeur de l ' adaptateur . Ensuite, vous pouvez utiliser ce
Intent intent = new Intent(context,NewActivity.class); context.startActivity(intent);
Pour créer un nouvel Intent , vous n'avez besoin que d'une instance de Context . Vous pouvez l'obtenir à partir de n'importe quelle instance de View (vous l'avez dans la méthode onItemClicked ):
@Override
public void onItemClicked(View view, int position) {
Context context = view.getContext();
Intent intent = new Intent(context, ActivityYouNeedToStart.class);
context.startActivity(intent);
}
Maintenant, pour créer et démarrer Intent , vous pouvez écrire un code comme celui-ci:
Intent intent = new Intent(context, ActivityYouNeedToStart.class); context.startActivity(intent);
Le code final est donc:
Context context = view.getContext();
Merci pour votre aide monsieur.
Voici la manière d'obtenir un écouteur de clics pour l'élément enfant dans la vue de recyclage.
public class HotelAdapter extends RecyclerView.Adapter {
private List<Top10Hotel> hotels;
private Context context;
private SavedHotelViewModel viewModel;
public HotelAdapter(List<Top10Hotel> hotels, Context context, SavedHotelViewModel viewModel) {
this.hotels = hotels;
this.context = context;
this.viewModel = viewModel;
}
@NonNull
@Override
public MyHotelViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recommended_hotel, viewGroup, false);
return new MyHotelViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyHotelViewHolder holder, int position) {
Top10Hotel hotel = hotels.get(position);
holder.hotelsTextView.setText(hotel.getHotel_name());
Glide.with(context)
.load(hotel.getHotel_image_url())
.error(R.drawable.ic_location_city)
// read original from cache (if present) otherwise download it and decode it
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.hotelsImageView);
long rating = 0;
if(hotel.getHotel_rating() != null && hotel.getHotel_rating().length()>0){
try {
rating = Long.parseLong(hotel.getHotel_rating());
}catch (NumberFormatException e){
rating =1;
}
}
String rate= null;
if(rating>=4.5){
rate = String.valueOf(rating)+" Excellent";
}else if(rating>=4 && (rating < 4.5)){
rate = String.valueOf(rating)+" Very Good";
}else {
rate = String.valueOf(rating)+" Good";
}
holder.rating.setText(rate);
String range = "â¹"+hotel.getHotel_low_range()+" - "+"â¹"+hotel.getHotel_high_range();
holder.priceRange.setText(range);
holder.area.setText(hotel.getHotel_area());
holder.saveImage.setOnClickListener(view -> {
RoomBooking hotelSaved = new RoomBooking(hotel.getHotel_id(),
hotel.getHotel_name(),
hotel.getHotel_area(),
hotel.getHotel_low_range(),
hotel.getHotel_high_range(),
hotel.getHotel_rating(),
hotel.getHotel_image_url());
if(hotel.isSaved()){
holder.saveImage.setImageResource(R.drawable.ic_favorite_black);
hotel.setSaved(false);
viewModel.delete(hotelSaved);
Toast.makeText(context, "Removed", Toast.LENGTH_SHORT).show();
}else {
holder.saveImage.setImageResource(R.drawable.ic_saved_love);
hotel.setSaved(true);
viewModel.insert(hotelSaved);
Toast.makeText(context, "saved", Toast.LENGTH_SHORT).show();
}
notifyDataSetChanged();
});
holder.linearLayout.setOnClickListener(view -> navigateToHotelActivity(hotel.getHotel_id(),hotel.getHotel_name()));
holder.hotelsImageView.setOnClickListener(view -> navigateToHotelActivity(hotel.getHotel_id(),hotel.getHotel_name()));
}
private void navigateToHotelActivity(String hotelId, String hotelName) {
Intent intent = new Intent(context, HotelActivity.class);
intent.putExtra("hotelId",hotelId);
intent.putExtra("hotelName",hotelName);
context.startActivity(intent);
}
@Override
public int getItemCount() {
return hotels.size();
}
public class MyHotelViewHolder extends RecyclerView.ViewHolder {
TextView hotelsTextView,rating,priceRange,area;
ImageView hotelsImageView;
ImageView saveImage;
LinearLayout linearLayout;
public MyHotelViewHolder(@NonNull View itemView) {
super(itemView);
linearLayout = itemView.findViewById(R.id.linearLayoutH);
hotelsTextView = itemView.findViewById(R.id.hotels_name);
hotelsImageView = itemView.findViewById(R.id.hotels_image);
rating = itemView.findViewById(R.id.hotel_rating);
priceRange = itemView.findViewById(R.id.price_range);
area = itemView.findViewById(R.id.area_name);
saveImage = itemView.findViewById(R.id.save_icon);
}
}
}