首页 > 解决方案 > 如何从另一个类刷新 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) {

}
}

标签: javaandroid-studio

解决方案


你可以像下面这样

步骤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

推荐阅读