@Soudagh

Как передать номер позиции из RecyclerView в активность с последующим взаимодействием с БД?

Есть кликабельный recyclerview с темами и активность, на которую идёт переход после нажатия на элемент recyclerview. Мне нужно заполнить данную активность, основываясь на выбранном варианте из прошлой активности, а именно мне нужно достать из выбранного варианта id (заполнение recyclerview и следующей активности идёт из бд), и далее использовать id в другой активности (заполнение другого recyclerview на основе полученного id).

Есть предположение, что нужно сделать через Intent, но все попытки обвенчались неудачей :(

ChooseThemeActivity
package com.example.myproject;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class ChooseThemeActivity extends AppCompatActivity {

    private RecyclerView mRecycler;
    private ThemeAdapter mThemeAdapter;
    private ThemeDBHelper databaseHelper;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.choose_theme);

        mRecycler = findViewById(R.id.recycler_themes);

        databaseHelper = new ThemeDBHelper(this);
        List<Theme> themeList = databaseHelper.getTheme();

        ThemeAdapter.ThemeChoiceListener themeChoiceListener = (theme, position) ->
                Toast.makeText(getApplicationContext(), "Был выбран пункт " + theme.getTheme(),
                Toast.LENGTH_SHORT).show();



        mThemeAdapter = new ThemeAdapter(this, themeChoiceListener, themeList);
        mRecycler.setAdapter(mThemeAdapter);
    }


    public void onThemeChoiceClick(View view) {
        Intent intent = new Intent(this, WordActivity.class);
        //intent.putExtra("id", id);
        startActivityForResult(intent, 0);
    }

}


ThemeAdapter

package com.example.myproject;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class ThemeAdapter extends RecyclerView.Adapter<ThemeAdapter.ViewHolder> {

    List<Theme> themes;

    interface ThemeChoiceListener {
        void onThemeChoiceClicked(Theme theme, int position);

    }

    private final ThemeChoiceListener onClickListener;

    private final LayoutInflater inflater;

    public ThemeAdapter(Context context, ThemeChoiceListener onClickListener, List<Theme> themes) {
        this.onClickListener = onClickListener;
        this.themes = themes;
        this.inflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.item_list, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Theme theme = themes.get(position);
        holder.themeName.setText(themes.get(position).getTheme());
        holder.themeDescription.setText(themes.get(position).getDescriptionTheme());
        holder.itemView.setOnClickListener(v -> onClickListener.onThemeChoiceClicked(theme, position));
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder  {

        final TextView themeName, themeDescription;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            themeName = itemView.findViewById(R.id.themeName_tv);
            themeDescription = itemView.findViewById(R.id.description_tv);

        }




    }


}


WordActivity

package com.example.myproject;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class WordActivity extends AppCompatActivity {

    private  RecyclerView mRecycler;
    private WordAdapter mWordAdapter;
    private ThemeDBHelper databaseHelper;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theme_fragment);

        mRecycler = findViewById(R.id.recycler_words);

        databaseHelper = new ThemeDBHelper(this);

        //long ID = getIntent().getLongExtra("ID");
        //Intent intent = getIntent();
        //String id = intent.getStringExtra("id");
        List<Word> wordList = databaseHelper.getWord(/*id*/);

        mWordAdapter = new WordAdapter(this, wordList);

        mRecycler.setAdapter(mWordAdapter);
    }

}
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
@foonfyrick
А в чем проблема? У тебя есть список, который ты заполняешь данными, далее этот список отображает ресайкл, когда кликаешь по итему, бери его позицию и из списка по индексу доставай объект который нужен, далее переноси его в другую активность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы