0

Это мой класс адаптера. Я хочу щелкнуть текстовое окно таким образом, чтобы при вводе значения, которое хранится в текстовом виде, появляется диалоговое окно. Это то, что мне нужно, но значения вводятся в случайные позиции.Изменить данные на RecyclerView ItemClick

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

public List<Student> list; 
static public Context context; 


public myAdapter(List<Student> stdList) { 
    this.list = stdList; 

} 

@Override 
public myAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    context = parent.getContext(); 

    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_item, null); 

    ViewHolder viewHolder = new ViewHolder(itemView); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.name.setText(list.get(position).getSname()); 

} 


class ViewHolder extends RecyclerView.ViewHolder { 

    protected TextView name; 
    protected TextView amt; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     this.name = (TextView) itemView.findViewById(R.id.Name); 
     this.amt = (TextView) itemView.findViewById(R.id.et_amount); 
     this.amt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final int pos = getAdapterPosition(); 
       final AlertDialog.Builder inputAlert = new AlertDialog.Builder(context); 
       inputAlert.setTitle("Pay for picnic"); 
       inputAlert.setMessage("We need the amount to proceed"); 
       final EditText userInput = new EditText(context); 
       userInput.setInputType(InputType.TYPE_CLASS_NUMBER); 
       inputAlert.setView(userInput); 
       inputAlert.setPositiveButton("Submit", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         String userInputValue = userInput.getText().toString(); 
         amt.setText(calc(userInputValue)); 
         notifyItemChanged(pos); 


        } 
       }); 
       inputAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       AlertDialog alertDialog = inputAlert.create(); 
       alertDialog.show(); 

      } 
     }); 
    } 

} 

public String calc(String val) { 

    int i = Integer.parseInt(val); 
    if (i > 850) { 
     Toast.makeText(context, "Incorrect amount", Toast.LENGTH_SHORT).show(); 
    } else { 
     i = 850 - i; 
     Toast.makeText(context, "Successful", Toast.LENGTH_SHORT).show(); 
    } 
    String value = String.valueOf(i); 
    return value; 

} 

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

}

+0

ли изменение его в 'this.amt.setText (известково (userInputValue));' работать? Если нет, я бы рекомендовал переместить ваш прослушиватель кликов на ваш 'onBindViewHolder' –

ответ

0

Если вы будете пытаться заполнить непосредственно как это, то он не будет хранить значение где-нибудь, а на свитке зрения рециркуляции или при изменении уведомлений он очистит ваши данные от просмотра, поэтому вам нужно сначала сохранить значение, а затем использовать его для отображения, я только что изменил ваш метод onCLick, как показано ниже, поэтому просто проверьте его.

 @Override 
     public void onClick(DialogInterface dialog, int which) { 
        String userInputValue = userInput.getText().toString(); 
        amt.setText(calc(userInputValue)); 

        final Student stud = list.get(pos); 
        stud.setAmt(calc(userInputValue)); 
        notifyItemChanged(pos); 


       } 

А потом добавить одну строку, чтобы отобразить данные в onBindViewHolder, как показано ниже,

 @Override 
     public void onBindViewHolder(ViewHolder holder, int position) 
     { 
      holder.name.setText(list.get(position).getSname()); 
      holder.amt.setText(list.get(position).getAmt()); 
     } 
0

Попробуйте переместить OnClickListener от ViewHolder к onBindViewHolder

+0

. Нет, эта часть не имеет ошибки. Значение изменяется, но когда я прокручиваю вниз, значение изменяется автоматически. –

+0

Вы пробовали переместить свой OnClickListener из ViewHolder в onBindViewHolder –

+0

OP, вам было бы намного легче получить доступ к позиции из onBindViewHolder. –

Смежные вопросы