簡體   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