import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;
import android.support.constraint.ConstraintLayout;
+import android.support.v7.widget.AppCompatTextView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Gravity;
}
public void onBindViewHolder(@NonNull TransactionRowHolder holder, int position) {
+ // in a race when transaction list is reduced, but the model hasn't been notified yet
+ // the view will disappear when the notifications reaches the model, so by simply omitting
+ // the out-of-range get() call nothing bad happens - just a to-be-deleted view remains
+ // a bit longer
+ if (position >= transactions.size()) return;
+
LedgerTransaction tr = transactions.get(position);
Context ctx = holder.row.getContext();
LinearLayout.LayoutParams.WRAP_CONTENT));
row.setGravity(Gravity.CENTER_VERTICAL);
row.setOrientation(LinearLayout.HORIZONTAL);
- row.setPaddingRelative(dp2px(ctx, 8), 0, 0, 8);
- accName = new TextView(ctx);
- accName.setLayoutParams(
- new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
+ row.setPaddingRelative(dp2px(ctx, 8), 0, 0, 0);
+ accName = new AppCompatTextView(ctx);
+ accName.setLayoutParams(new LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 5f));
accName.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
row.addView(accName);
- accAmount = new TextView(ctx);
+ accAmount = new AppCompatTextView(ctx);
LinearLayout.LayoutParams llp =
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
ConstraintLayout row;
public TransactionRowHolder(@NonNull View itemView) {
super(itemView);
- this.row = (ConstraintLayout) itemView;
+ this.row = itemView.findViewById(R.id.transaction_row);
this.tvDescription = itemView.findViewById(R.id.transaction_row_description);
this.tvDate = itemView.findViewById(R.id.transaction_row_date);
this.tableAccounts = itemView.findViewById(R.id.transaction_row_acc_amounts);