Как вызвать промежуточный элемент, щелкнув по элементу в списке, который проходит через адаптер?

#java #android

#java #Android

Вопрос:

Мне нужно вызвать промежуточный элемент в этом действии, щелкнув по элементу в списке, который поступает из моего адаптера.

 public class SoundRecyclerAdapter extends RecyclerView.Adapter<SoundRecyclerAdapter.SoundViewHolder> {
    private final ArrayList<SoundObject> soundObjects;

    SoundRecyclerAdapter(ArrayList<SoundObject> soundObjects) {
        this.soundObjects = soundObjects;
    }

    @NonNull
    @Override
    public SoundViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.sound_item, parent, false);
        return new SoundViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull SoundViewHolder holder, int position) {
        final SoundObject object = soundObjects.get(position);
        final Integer soundID = object.getItemID();

        holder.itemTextView.setText(object.getItemName());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // I tried calling the interstitial here, but to no avail
                EventHandlerClass.startMediaPlayer(v, soundID);
            }
        });

        // Handle actions when the user presses a sound button
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                EventHandlerClass.popupManager(v, object);
                return true;
            }
        });
    }

    @Override
    public int getItemCount() {
        return soundObjects.size();
    }

    class SoundViewHolder extends RecyclerView.ViewHolder {
        final TextView itemTextView;

        SoundViewHolder(View itemView) {
            super(itemView);
            itemTextView = itemView.findViewById(R.id.textViewItem);
        }
    }
}
  

Комментарии:

1. В чем была ваша ошибка?

2. Я попытался вызвать промежуточный элемент с тем же кодом, что и MainActivity в OnClick адаптера. Однако я не могу найти контекст (в случае, если MainActivit — это «this»).

3. Я думаю, что теперь ваша проблема решена. Пожалуйста, примите ответ, который вам помог.

Ответ №1:

Передайте контекст в качестве параметра конструктора адаптера:

 private Context context;

SoundRecyclerAdapter(Context context, ArrayList<SoundObject> soundObjects) {
    this.soundObjects = soundObjects;
    this.context = context;
}
  

и используйте его в обработчике щелчков

Комментарии:

1. Я сделал реализацию на адаптере. Однако в MainActiviy возникла другая проблема. Я получаю сообщение об ошибке в «soundList», предлагающее мои варианты: создать конструктор или удалить parametrix из SoundRecyclerAdapter. частный конечный SoundRecyclerAdapter SoundAdapter = новый SoundRecyclerAdapter (список звуков);

2. Замените создание экземпляра на SoundAdapter = new SoundRecyclerAdapter(this, soundList);

3. Это сработало! Я только что внес небольшое изменение, изменив «this, список композиций» на «soundList, this». Большое вам спасибо!!!

4. @RodolfoOliveira, рад помочь

Ответ №2:

Используйте этот код в setOnClickListener() методе:

 mInterstitialAd = new InterstitialAd(SoundRecyclerAdapter.this);
  

Затем добавьте рекламные запросы и загрузите объявление.

Комментарии:

1. Спасибо за помощь, но реализация S-Sh работала отлично!

2. Это одна и та же работа, выполняемая двумя разными способами. Я сделал с меньшим количеством кода.