java - 如何从另一个类刷新 TextView?
问题描述
我收到此错误:
尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'
public class AdaptadorCarrito extends
RecyclerView.Adapter<AdaptadorCarrito.ViewHolderCarrito> {
ArrayList<CarritoVo> listaCarrito;
AdaptadorCarrito adapter;
RecyclerView.Adapter madapter;
int i = 1;
public AdaptadorCarrito(ArrayList<CarritoVo> listaCarrito) {
this.listaCarrito = listaCarrito;
}
@NonNull
@Override
public ViewHolderCarrito onCreateViewHolder(@NonNull final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_carrito, null, false);
final ViewHolderCarrito myHolder = new ViewHolderCarrito(view);
final CafeteriaDB cafeteriaDB = new CafeteriaDB(parent.getContext());
myHolder.item_list_carrito.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int newPosition = myHolder.getAdapterPosition();
cafeteriaDB.eliminarProducto(myHolder.etiNombre.getText().toString(), myHolder.etiInfo.getText().toString());
eliminarProducto(newPosition);
// i++;
// Toast.makeText(parent.getContext(),"Producto Eliminado "+i+" eliminado",Toast.LENGTH_SHORT).show();
CarritoCompras obj = new CarritoCompras();
TextView tv = obj.getTextView(); //Error Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
tv.setText(String.valueOf(cafeteriaDB.getTotal()));
}
});
return myHolder;
}
private void eliminarProducto(int position) {
listaCarrito.remove(position);
notifyItemRemoved(position);
}
@Override
public void onBindViewHolder(@NonNull ViewHolderCarrito holder, int position) {
CarritoVo positions = listaCarrito.get(position);
holder.etiNombre.setText(listaCarrito.get(position).getNombre());
holder.etiPrecio.setText(String.valueOf(listaCarrito.get(position).getPrecio()));
holder.etiInfo.setText(listaCarrito.get(position).getInfo());
holder.etiCantidades.setText(String.valueOf(listaCarrito.get(position).getCantidad()));
holder.etiFoto.setImageBitmap(positions.getFoto());
}
@Override
public int getItemCount() {
//return listaCarrito.size();
return (listaCarrito == null) ? 0 : listaCarrito.size();
}
public class ViewHolderCarrito extends RecyclerView.ViewHolder {
LinearLayout item_list_carrito;
TextView etiNombre, etiPrecio, etiInfo, etiCantidades, txtTotalB, txtTotalF;
ImageView etiFoto;
public ViewHolderCarrito(@NonNull View itemView) {
super(itemView);
item_list_carrito = (LinearLayout) itemView.findViewById(R.id.id_carrito_item);
etiFoto = (ImageView) itemView.findViewById(R.id.fotoC);
etiNombre = (TextView) itemView.findViewById(R.id.nombreC);
etiPrecio = (TextView) itemView.findViewById(R.id.precioC);
etiInfo = (TextView) itemView.findViewById(R.id.infoC);
etiCantidades = (TextView) itemView.findViewById(R.id.cantidadC);
}
}
}
活动
public class CarritoCompras extends AppCompatActivity implements Carrito.OnFragmentInteractionListener{
TextView txtTotalF;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_carrito_compras);
CafeteriaDB db = new CafeteriaDB(this);
getTextView();
txtTotalF = (TextView)findViewById(R.id.totalF);
txtTotalF.setText(String.valueOf(db.totalFilas()));
}
public TextView getTextView(){
TextView txtTotalB = (TextView)findViewById(R.id.totalB); //Error Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
return txtTotalB;
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
解决方案
你可以像下面这样
步骤1:
只加载一次 TextView
TextView txtTotalB; // declare class level
在 onCreate() 里面
txtTotalB = (TextView)findViewById(R.id.totalB);
第2步:
创建方法
public TextView getTextView(){
return txtTotalB
}
第 3 步:
在您的适配器类中访问您的活动方法,如下所示
TextView tv = ((CarritoCompras)context).getTextView();
tv.setText(String.valueOf(cafeteriaDB.getTotal())); // now here you done
推荐阅读
- algorithm - 当这两个元素相等/不相等时:最接近平均值的元素与中位数?
- python - 替换 Numpy 数组的一部分时避免不正确的舍入
- c++ - 宿舍访问问题(优先队列申请)
- list - 我在 2013 年创建了一个带有到期日期和电子邮件 ID 的 Sharepoint 列表。要求是必须生成自动邮件
- javascript - 纱线链接适用于一个文件,但在同一个 Angular 项目中为另一个文件抛出错误
- laravel - laravel中的循环问题
- php - 不要使用 Google Translate API 翻译双花括号之间的数据
- node.js - 角度服务器端构建错误无法找到错误
- c# - 使用 System.Text.Json 使用动态键查询或反序列化 json
- tableau-api - Tableau中如何使用excel的averageif函数