Как открыть новое намерение от recylerview onclick - PullRequest
3 голосов
/ 01 апреля 2019

Я все еще новичок в разработке 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 показать новое действие, начатое как это

// 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 активности 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) })
    })
  }

Мой вопрос: как заставить ссылочный пример кода работать на моем адаптере // Set New View? Большое спасибо.

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

Чтобы создать новый 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);
}
1 голос
/ 01 апреля 2019

Вот один из способов получить прослушиватель кликов для дочернего элемента в обзоре переработчика.

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


}
1 голос
/ 01 апреля 2019

Вы должны передать context вашей деятельности / фрагмента конструктору adapter.Тогда вы можете использовать это

Intent intent = new Intent(context,NewActivity.class);
context.startActivity(intent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...