как из адаптера вывести число в MainActivity

цель:вывести сумму в MainActivity есть RecycleView и TextView "корзина" в item списка есть строка "цена" и кнопка "купить"

при нажатий на кнопку "купить" я вывожу сумму в TextView но не могу сложить с другой

это адаптер

public class Adapter extends RecyclerView.Adapter<Adapter.Holder> {

    private Context context;
    private ArrayList<Model> arrayList;
    private TextView ad;

    public Adapter(Context context, ArrayList<Model> arrayList, TextView ad) {
        this.context = context;
        this.arrayList = arrayList;
        this.ad = ad;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.row, parent, false);
        return new Holder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, @SuppressLint("RecyclerView") int position) {

            Model model = arrayList.get(position);

            String id = model.getId();
            String name = model.getName();
            String phone = model.getPhone();



            holder.name.setText(name);
            holder.phone1.setText(phone);


            holder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {



                   ad.setText(phone+ 1);

                }
            });

            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    editDialog(position,
                            id,
                            name,
                            phone);
                }
            });


    }


    private void editDialog(int position, String id, String name, String phone) {

        Intent intent = new Intent(context , EditRecordActivity.class);
        intent.putExtra("ID", id);
        intent.putExtra("NAME", name);
        intent.putExtra("PHONE", phone);
        context.startActivity(intent);
    }


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


    public class Holder extends RecyclerView.ViewHolder {


        TextView name, phone1;
        Button button;
        TextView  ad;


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

            ad = itemView.findViewById(R.id.txt_price);
            button = itemView.findViewById(R.id.button_bay);
            name = itemView.findViewById(R.id.name);
            phone1 = itemView.findViewById(R.id.description);
        }
    }
}

это класс для бд SQLite

```   public class Constants {
//Создаем переменные для базы данных
public static final String DB_NAME = "PERSON_INFO";
public static final int DB_VERSION = 1;
public static final String TABLE_NAME = "PERSON_INFO_TABLE";

public static final String C_ID = "ID";
public static final String C_NAME = "NAME";
public static final String C_PHONE = "PHONE";



public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
        + C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + C_NAME + " TEXT,"
        + C_PHONE + " TEXT"
        + ");";

} ```

это MainActivity


    FloatingActionButton fab;
    ActionBar actionBar;
    RecyclerView recyclerView;
    DatabaseHelper databaseHelper;

    //вывод суммы
    TextView ad;
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        actionBar = getSupportActionBar();
        actionBar.setTitle(R.string.Agent);

        recyclerView = findViewById(R.id.recycleView);
        databaseHelper = new DatabaseHelper(this);

        ad=findViewById(R.id.txt_price);

        //добавление и установка адаптера
        showRecord();


        fab = findViewById(R.id.addFabButton);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(MainActivity.this, AddRecordActivity.class);
                startActivity(intent);

            }
        });



    }
    //добавление и установка адаптера
    private void showRecord() {
        Adapter adapter = new Adapter(MainActivity.this, databaseHelper.getAllData(), ad);
        recyclerView.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        showRecord();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == event.KEYCODE_BACK){
            moveTaskToBack(true);
        }

        return super.onKeyDown(keyCode, event);
    }
}

main


Ответы (1 шт):

Автор решения: Антоша

Создайте интерфейс:

interface NumberSender {
    fun onNumberSent(count:Int)
}

Это интерфейс пусть реализует Ваша активити:

class MainActivity : AppActivity, NumberSender { 

В адаптер передайте эту активити в виде интерфейса

Adapter(Context context, ArrayList<Model> arrayList, TextView ad, **NumberSender sender** ) 

и в нужном месте адаптера вызовите метод:

sender.onNumberSent(12312)

В адаптере можете дергать метод от активити и передавать туда все что угодно... если надо можно передать в ViewHolder интерфейс и там дергать этот метод... TextView в адаптер передавать не надо, им должна управлять активити, а не адаптер другого компонента....

П.С: немного Котлина, но главное, думаю, что суть понятна

→ Ссылка