简体   繁体   中英

Replace Instead Of Adding Item To Arraylist

I building an app to practice in arraylist and recyclerView.

In the main activity I have "Add" button than I can add things to the arraylit to display in the recyclerView,However,the first time I add new line its working fine,but when I try to add another one,its replacing the first line I added with the new line.

I will be glad if you can point what am I doing wrong,Thank you.

Add Line Activity:

public void AddButton(View view){

    if (imageUri != null && !mEditText.getText().toString().isEmpty()){

        Intent intent = new Intent(AddCompany.this,MainActivity.class);
        intent.putExtra("isAddNewCompany", true);
        intent.putExtra("CompanyImage", imageUri.toString());
        intent.putExtra("CompanyName", mEditText.getText().toString());
        startActivity(intent);

    }


}

MainActivity OnCreate with the views:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = getIntent();

        ArrayList<String> listTitle = new ArrayList<>();

        ArrayList<String> listPicture = new ArrayList<>();


        if (intent.getBooleanExtra("isAddNewCompany",false)){

            String CompanyImage = intent.getStringExtra("CompanyImage");
            String companyName = intent.getStringExtra("CompanyName");

            listTitle.add(companyName);
            listPicture.add(CompanyImage);

        }




        // set up the RecyclerView
        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        RecyclerAdapter adapter = new RecyclerAdapter(this,listPicture,listTitle);


        adapter.setClickListener(new RecyclerAdapter.ItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.e("Position Number - ", String.valueOf(position));
                Toast.makeText(MainActivity.this, adapter.getItem(position), Toast.LENGTH_SHORT).show();

            }
        });

        recyclerView.setAdapter(adapter);

    }

RecyclerView Adapter:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

    private final ArrayList<String> mData;
    private final ArrayList<String> mImageView;
    private final LayoutInflater mInflater;
    private ItemClickListener mClickListener;

    // data is passed into the constructor
    RecyclerAdapter(Context context, ArrayList<String> imageView, ArrayList<String> data) {
        this.mInflater = LayoutInflater.from(context);
        this.mData = data;
        this.mImageView = imageView;
    }

    // inflates the row layout from xml when needed
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
        return new ViewHolder(view);
    }

    // binds the data to the TextView in each row
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String animal = mData.get(position);
        String picture = mImageView.get(position);

        Picasso.get().load(picture).into(holder.myImageView);
        holder.myTextView.setText(animal);

    }

    // total number of rows
    @Override
    public int getItemCount() {
        return mData.size();
    }


    // stores and recycles views as they are scrolled off screen
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView myTextView;
        ImageView myImageView;

        ViewHolder(View itemView) {
            super(itemView);
            myTextView = itemView.findViewById(R.id.tvAnimalName);
            myImageView = itemView.findViewById(R.id.imageView);

            itemView.setOnClickListener(this);

        }

        @Override
        public void onClick(View view) {
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        }
    }

    // convenience method for getting data at click position
    String getItem(int id) {
        return mData.get(id);
    }

    // allows clicks events to be caught
    void setClickListener(ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }

    // parent activity will implement this method to respond to click events
    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }
}

When you start activity,every time new list instance will be created that's why you got only one value.if you want already added value, use same list instance.

     List<String> listTitle;

      List<String> listPicture;

public List<String> getLisPictureInstance(){
    if(listPicture ==null)
    listPicture = new ArrayList<>();
    return listPicture ;

}

public List<String> getListTitleInstance(){
    if(listTitle ==null)
    listTitle = new ArrayList<>()
    return listTitle ;

}
        if (intent.getBooleanExtra("isAddNewCompany",false)){

            String CompanyImage = intent.getStringExtra("CompanyImage");
            String companyName = intent.getStringExtra("CompanyName");

            getListTitleInstance().add(companyName);
            getLisPictureInstance().add(CompanyImage);

        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM