Сводка
У меня есть CardView в RecycleView с элементом EditText, и я хотел бы получить пользовательский ввод, не требуя, чтобы он нажимал кнопку или нажимал ввод, и сравнивалэто с предопределенной строкой.
Я перепробовал много уроков, даже ответов в stackOverflow, но, похоже, все еще не работает.Моя идея заключалась в том, чтобы реализовать TextWatcher в моем классе адаптера, чтобы получить входные данные.Ниже приведена моя попытка (если я уберу весь связанный с ним контент EditText, код будет работать нормально).Ниже приведена моя попытка:
Код MyAdapter
public class MyAdapter2 extends RecyclerView.Adapter<MyAdapter2.MyViewHolder>{
private Context mContext;
private List<CardAudioGrid> mList;
private OnItemClickListener mListener;
private int nowPlaying = -1;
private String ans;
public interface OnItemClickListener{
void onPlayClick (int position);
}
public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}
public MyAdapter2(Context mContext, List<CardAudioGrid> mList) {
this.mContext = mContext;
this.mList = mList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.audiocard, viewGroup, false);
//when I try to run the code, it shows the error: ...MyAdapter2.MyViewHolder is not an enclosing class
return new MyViewHolder(view, mListener, new MyViewHolder.MyCustomEditTextListener());
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.audioCardBackground.setImageResource(mList.get(position).getCardBackground());
...
holder.myCustomEditTextListener.updatePosition(holder.getLayoutPosition());
}
@Override
public int getItemCount() {
return mList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
ImageView mediaPlayer, audioCardBackground;
EditText toonName;
MyCustomEditTextListener myCustomEditTextListener;
public MyViewHolder(View itemView, final OnItemClickListener listener, MyCustomEditTextListener myCustomEditTextListener) {
super(itemView);
itemView.findViewById(R.id.cardbackgroundId);
...
this.myCustomEditTextListener = myCustomEditTextListener;
mediaPlayer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener!=null){
int position = getLayoutPosition();
nowPlaying = position;
if (position != RecyclerView.NO_POSITION){
listener.onPlayClick(position);
notifyDataSetChanged(); //restarts the views
}else{
Toast.makeText(mContext, "error", Toast.LENGTH_LONG);
}
}
}
});
}
//I want the EditText to watch what the user is typing. Every change should be compared
//to the names string given from when adding mList items
private class MyCustomEditTextListener implements TextWatcher{
private int position;
public void updatePosition(int position) {
this.position = position;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
ans = s.toString().toLowerCase();
if (ans == mList.get(position).getName()){
Toast.makeText(mContext, "Correct", Toast.LENGTH_LONG);
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
}
}
Ошибка моей попытки прокомментирована в приведенном выше коде.Как мне реализовать эту идею?
В настоящее время я изучаю, как правильно управлять андроидом, поэтому я был бы очень признателен, если бы вы объяснили шаги решения.