java.lang.IllegalStateException: невозможно вызвать этот метод, пока RecyclerView вычисляет макет - PullRequest
0 голосов
/ 21 сентября 2019

Существует проблема, когда я открываю действие и прокручиваю до последней строки / значения в RecyclerView.


notifyItemChanged(dataViewHolder.getAdapterPosition()); 

с помощью этой строки RecyclerView изменяет значение, но приложение вылетает после последнего значения.


 mRecyclerView.post(new Runnable() {
            @Override public void run() {
                notifyItemChanged(dataViewHolder.getAdapterPosition());
            }
                }); 

И другой метод, который я использую, приложение не вызывает сбой, ноПоследнее значение - бесконечный цикля хочу только приращение 1 Значение Как в RecyclerView Last Row Значение равно 19, поэтому я использую Int num +1;и 19 + число;= 20;гайка в Runnable Method Value - это бесконечный цикл.Пожалуйста помоги !Заранее спасибо ...

Внизу СМОТРИТЕ ПОЛНЫЙ КОД ...

public class TransactionHistoryAdapter extends 
RecyclerView.Adapter<TransactionHistoryAdapter.DataViewHolder> {

public Context context;
ArrayList<Transaction> Listtransactions ;
DataViewHolder _dataViewHolder;

public TransactionHistoryAdapter(Context context, ArrayList<Transaction> transactions) {
    this.context = context;
    this.Listtransactions = transactions;
}
@NonNull
@Override
public DataViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {


    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.payment_list,viewGroup,false);

  return new DataViewHolder(view);

}

private RecyclerView mRecyclerView;
@Override
public void onBindViewHolder(@NonNull final DataViewHolder dataViewHolder, final int position) {

    final Transaction Mtransaction = Listtransactions.get(position); //getList Data to Model
    int num = 0;
    dataViewHolder.entryDate.setText(Mtransaction.getTransactionEntryDate());
    dataViewHolder.RemainingAmount.setText(Mtransaction.getTransactionRemainingAmount());
    dataViewHolder.PaidAmount.setText(Mtransaction.getTransactionPaidAmount());

    int ListLastValue =Integer.parseInt( Listtransactions.get(Listtransactions.size() -1).getTransactionRemainingAmount());
    int ValuefrmRecycler =  Integer.parseInt( Listtransactions.get(dataViewHolder.getAdapterPosition()).getTransactionRemainingAmount());


    if(ListLastValue == ValuefrmRecycler)
    {
        num = 1;
        Listtransactions.get(dataViewHolder.getAdapterPosition()).setTransactionRemainingAmount(String.valueOf(ListLastValue + num));

            // METHOD NO.1 == App Crash   
            notifyItemChanged(dataViewHolder.getAdapterPosition());

        // METHOD NO.2 == InfiniteLoop
     /*   mRecyclerView.post(new Runnable() {
            @Override public void run() {
                //  notifyDataSetChanged();
                notifyItemChanged(dataViewHolder.getAdapterPosition());
            }
        }); */

        }
}



@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    mRecyclerView = recyclerView;
}



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


public class DataViewHolder extends RecyclerView.ViewHolder {

    TextView entryDate,PaidAmount,RemainingAmount;

    public DataViewHolder(View view) {
        super(view);

        entryDate=(TextView) view.findViewById(R.id.tvdate);
        PaidAmount = (TextView) view.findViewById(R.id.tvPaid);
        RemainingAmount = (TextView) view.findViewById(R.id.tvRemaining);

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...