繁体   English   中英

如何从recylerview onclick打开新的意图

[英]How to open new intent from recylerview onclick

我仍然是Android开发者的初学者,我在我的recylerview项目点击后设置了一些新的视图,但我的应用程序在kotlin和android之间混合,因为我从互联网获得了一些源代码,但我的项目从一开始就是由kotlin编译的。

// 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
                    }

我引用的示例代码使用kotlin show new activity就像这样开始

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

注意:createViewPagerView =是xml activity main上的属性值 NatureCreativePagerAdapter =是我将使用的适配器

setCreativeViewPagerAdapter =类中的一个函数,代码如下

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

我的问题是如何让引用的示例代码在我的//设置新视图适配器上工作非常感谢。

您应该将您的activity / fragment的context提供给adapter构造函数。 然后你可以用它

Intent intent = new Intent(context,NewActivity.class);
context.startActivity(intent);

要创建新的Intent您只需要一个Context实例。 你可以从任何View实例中获取它(你在onItemClicked方法中有它):

Context context = view.getContext();

现在要创建并启动Intent您可以编写如下代码:

Intent intent = new Intent(context, ActivityYouNeedToStart.class);
context.startActivity(intent);

所以,最终的代码是:

@Override
public void onItemClicked(View view, int position) {
    Context context = view.getContext();
    Intent intent = new Intent(context, ActivityYouNeedToStart.class);
    context.startActivity(intent);
}

以下是在recyclerview中实现子项的单击侦听器的一种方法。

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


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM