android 无法使该按钮在RecyclerList上添加新项目,仅起作用一次

uqjltbpv  于 2022-12-16  发布在  Android
关注(0)|答案(2)|浏览(144)

一直在这个代码上工作了一段时间,作为我的新回收清单,我似乎不能弄清楚为什么按钮只工作一次。
下面是适配器:

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class AdaptadorLista extends RecyclerView.Adapter<AdaptadorLista.ViewHolderLista> {

    ArrayList<ComponentesLista> listaComponentes;

    public AdaptadorLista(ArrayList<ComponentesLista> listaComponentes) {
        this.listaComponentes = listaComponentes;
    }

    @NonNull
    @Override
    public ViewHolderLista onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_lista, parent, false);
        return new ViewHolderLista(view);
    }

    @Override
    public void onBindViewHolder(ViewHolderLista holder, int position) {

        holder.textViewDescripcion.setText(String.valueOf(listaComponentes.get(position).getDescripcion()));
        holder.textViewDinero.setText(String.valueOf(listaComponentes.get(position).getDinero()));
        holder.textViewCantidad.setText(String.valueOf(listaComponentes.get(position).getCantidad()));


    }

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

    public class ViewHolderLista extends RecyclerView.ViewHolder {

        private TextView textViewCantidad, textViewDescripcion, textViewDinero;

        public ViewHolderLista(@NonNull View itemView) {
            super(itemView);
            textViewCantidad= (TextView) itemView.findViewById(R.id.textMuestraCantidad);
            textViewDescripcion = (TextView) itemView.findViewById(R.id.textMuestraDescripcion);
            textViewDinero = (TextView) itemView.findViewById(R.id.textMuestraPrecio);
        }
    }
}

下面是它使用的对象:

public class ComponentesLista {
    private String descripcion;
    private String cantidad;
    private String dinero;

    public ComponentesLista() {

    }

    public ComponentesLista(String descripcion, String cantidad, String dinero) {
        this.descripcion = descripcion;
        this.cantidad = cantidad;
        this.dinero = dinero;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getCantidad() {
        return cantidad;
    }

    public void setCantidad(String cantidad) {
        this.cantidad = cantidad;
    }

    public String getDinero() {
        return dinero;
    }

    public void setDinero(String dinero) {
        this.dinero = dinero;
    }
}

这里是主方法(它不是主方法,它是我按下按钮后使用的另一个屏幕,但它不应该是问题所在,对吗?)

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class PantallaLista extends AppCompatActivity {

    ArrayList<ComponentesLista> componentesLista;
    RecyclerView recyclerLista;
    
    //int cont = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista);

        // Seccion ArrayList Lista

        componentesLista=new ArrayList<>();

        recyclerLista= (RecyclerView) findViewById(R.id.recyclerViewLista);
        recyclerLista.setLayoutManager(new LinearLayoutManager(this));

        
        // Botones

        Button nuevo = (Button) findViewById(R.id.nuevoButton);
        
        nuevo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                llenarLista();
            }
        });
        
        Button guardarVolver = (Button) findViewById(R.id.terminarButton);

        guardarVolver.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(PantallaLista.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }

    private void llenarLista () {

        EditText textoGetDescripcion = (EditText) findViewById(R.id.textInputProducto);
        EditText textoGetCantidad = (EditText) findViewById(R.id.textInputCantidad);
        EditText textoGetPrecio = (EditText) findViewById(R.id.textInputPrecio);

        componentesLista.add(new ComponentesLista(textoGetDescripcion.getText().toString(), textoGetPrecio.getText().toString(), textoGetCantidad.getText().toString()));

        AdaptadorLista adapter = new AdaptadorLista(componentesLista);

        recyclerLista.setAdapter(adapter);
        
        //System.out.println(textoGetDescripcion.getText().toString() + textoGetPrecio.getText().toString() + textoGetPrecio.getText().toString());
    }

}
roqulrg3

roqulrg31#

每次向列表中添加项目时都要设置一个适配器,无论何时向列表中添加新项目,都必须使用adapter.notifyItemInserted(position)

tvokkenx

tvokkenx2#

活动来了

public class PantallaLista extends AppCompatActivity {

ArrayList<ComponentesLista> componentesLista;
RecyclerView recyclerLista;
AdaptadorLista adapter;

//int cont = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista);

    // Seccion ArrayList Lista

    componentesLista=new ArrayList<>();

    recyclerLista= (RecyclerView) findViewById(R.id.recyclerViewLista);
    recyclerLista.setLayoutManager(new LinearLayoutManager(this));

    adapter = new AdaptadorLista(componentesLista);
    recyclerLista.setAdapter(adapter);
    
    // Botones

    Button nuevo = (Button) findViewById(R.id.nuevoButton);
    
    nuevo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            llenarLista();
        }
    });
    
    Button guardarVolver = (Button) findViewById(R.id.terminarButton);

    guardarVolver.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(PantallaLista.this, MainActivity.class);
            startActivity(intent);
        }
    });
}

private void llenarLista () {

    EditText textoGetDescripcion = (EditText) findViewById(R.id.textInputProducto);
    EditText textoGetCantidad = (EditText) findViewById(R.id.textInputCantidad);
    EditText textoGetPrecio = (EditText) findViewById(R.id.textInputPrecio);

    ComponentesLista tempData = new ComponentesLista(textoGetDescripcion.getText().toString(), textoGetPrecio.getText().toString(), textoGetCantidad.getText().toString())
    adapter.addNewItems(tempData);
 
}

}
这是适配器

public class AdaptadorLista extends RecyclerView.Adapter<AdaptadorLista.ViewHolderLista> {

ArrayList<ComponentesLista> listaComponentes;

public AdaptadorLista(ArrayList<ComponentesLista> listaComponentes) {
    this.listaComponentes = listaComponentes;
}

public addNewItems(ComponentesLista tempComponent){
    this.listaComponentes.add(tempComponent);
    notifyDataSetChanged();
}

@NonNull
@Override
public ViewHolderLista onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_lista, parent, false);
    return new ViewHolderLista(view);
}

@Override
public void onBindViewHolder(ViewHolderLista holder, int position) {

    holder.textViewDescripcion.setText(String.valueOf(listaComponentes.get(position).getDescripcion()));
    holder.textViewDinero.setText(String.valueOf(listaComponentes.get(position).getDinero()));
    holder.textViewCantidad.setText(String.valueOf(listaComponentes.get(position).getCantidad()));
}

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

public class ViewHolderLista extends RecyclerView.ViewHolder {

    private TextView textViewCantidad, textViewDescripcion, textViewDinero;

    public ViewHolderLista(@NonNull View itemView) {
        super(itemView);
        textViewCantidad= (TextView) itemView.findViewById(R.id.textMuestraCantidad);
        textViewDescripcion = (TextView) itemView.findViewById(R.id.textMuestraDescripcion);
        textViewDinero = (TextView) itemView.findViewById(R.id.textMuestraPrecio);
    }
}

}
如果你不明白什么,请告诉我。

相关问题