Replace Instead Of Adding Item To Arraylist

187 views Asked by At

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);
    }
}
1

There are 1 answers

1
androidLearner On

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);

        }