'How to display numbers (starting from 1 to n) for CardViews of dynamic size?

I have a main class where I have a CardView and one add button. On clicking add Button, we can add a cardview below. How this works is basically that I have incorporated card.xml layout into my main class as a container layout that is added.

Now I want to assign each card a number (set), basically display 1, 2, 3 etc. that is increasing with each added card view below the main one on the top.

However, when I increase the number in the addcard method, the app crashes.

In main class:

    int set = 1;

in onCreate method:

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


    add = findViewById(R.id.addperff);
    layout = findViewById(R.id.container);


    textView2 = findViewById(R.id.textViewSets);
    textView2.setText(""+set);


    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
      
            addCard();


        }
    });
    Intent secondIntent = getIntent();    //getting the title from other class
    String message = secondIntent.getStringExtra("One");


    TextView textView = (TextView) findViewById(R.id.type);

    textView.setText(message);
}



    private void addCard() {
        final View view = getLayoutInflater().inflate(R.layout.card, null);
        ++set;
        TextView textView3 = findViewById(R.id.textViewSets2);
        textView3.setText(""+set);
        layout.addView(view);
    }
}

Basically I have a horizontal layout with text(views) on top and edittexts for the user put in a number. A horizontal layout with 3 cardviews basically.



Solution 1:[1]

Try changing

    TextView textView3 = findViewById(R.id.textViewSets2);

to

    TextView textView3 = view.findViewById(R.id.textViewSets2);

I'm assuming this R.id.textViewSets2 is inside the just inflated view, and not inside your activity at that point

Solution 2:[2]

Why dont you try this?:

private void addCard() {
        final View view = getLayoutInflater().inflate(R.layout.card, null);
        ++set;
        TextView textView = new TextView(this);
        textView.setText(""+set);
        layout.addView(view);
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ivo Beckers
Solution 2 Sambhav. K