как из адаптера вывести число в 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);
}
}
Ответы (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 в адаптер передавать не надо, им должна управлять активити, а не адаптер другого компонента....
П.С: немного Котлина, но главное, думаю, что суть понятна
