Я работаю над небольшим приложением для Android с использованием Java + RecyclerView + CardView
Представление Recycler работает нормально, но ...
Я хочу, чтобы кнопка отправки на карточке получала текстиз поля Edittext в той же карточке и назначьте его переменной.
Я хочу, чтобы слушатель был для кнопки, как я сделал, а не для редактирования текста.
Кнопка работает нормально, если я прошу ее сделать что-то еще, я считаю, что проблема заключается в получении текста из текста редактирования на той же карте.
Кто-нибудь знает, как ее решить?
Спасибо,
Мой адаптер:
public class ExerciseAdapter extends RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder> {
private Context mCtx;
private List<Exercise> mExerciselist;
private OnItemClickListener mListener;
public interface OnItemClickListener{
void onSubClick(int position);//sub button
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}
public ExerciseAdapter(Context ctx, List<Exercise> exerciselist) {
mCtx = ctx;
this.mExerciselist = exerciselist;
}
@NonNull
@Override
public ExerciseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.exercise_card, null); //null is the parent
return new ExerciseViewHolder(view, mListener);
}
@Override
public void onBindViewHolder(@NonNull ExerciseViewHolder holder, int position) {
Exercise exercise = mExerciselist.get(position);
//bind title and view
holder.textViewName.setText(exercise.getName());
holder.textViewWt.setText(exercise.getWt());
holder.textViewRep.setText(exercise.getRep());
}
@Override
public int getItemCount() {
return mExerciselist.size();
}
class ExerciseViewHolder extends RecyclerView.ViewHolder {
TextView textViewName, textViewWt, textViewRep;
Button subButton; // Sub button
EditText wtIn, repIn;
String wtstr, repstr;
public ExerciseViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
super(itemView);
textViewName = itemView.findViewById(R.id.exname); //populate card views
textViewWt = itemView.findViewById(R.id.exwt);
textViewRep = itemView.findViewById(R.id.exrep);
subButton = itemView.findViewById(R.id.subex); //sub button
wtIn = itemView.findViewById(R.id.inexwt);
repIn = itemView.findViewById(R.id.inexrep);
wtstr = wtIn.getText().toString();
repstr = repIn.getText().toString();
subButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
listener.onSubClick(position);
}}
}
});
}
}
}
и Основная активность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//init views
mGYMDays = (TextView) findViewById(R.id.gymdaystext);
inputGYMnum = (EditText) findViewById(R.id.inputnum);
//load data
loadData();
//populate list
final ArrayList<Exercise> exerciselist = new ArrayList<Exercise>();
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
exerciselist.add(new Exercise("lat","32", "22"));
//recycle view
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//adapter
adapter = new ExerciseAdapter(this, exerciselist);
recyclerView.setAdapter(adapter);
//clicking
adapter.setOnItemClickListener(new ExerciseAdapter.OnItemClickListener() {
@Override
public void onSubClick(int position) {
Exercise exercise = exerciselist.get(position);
EditText wtIn = (EditText)findViewById(R.id.inexwt);
EditText repIn = (EditText) findViewById(R.id.inexrep);
String newwt = wtIn.getText().toString();
String newrep = repIn.getText().toString();
exercise.Wt = newwt ;
exercise.Rep = newrep;
adapter.notifyDataSetChanged();
}
});
}