0

I have the following code:

public class Klasse {
  TextView[] tvAuftrag = new TextView[5];
  ImageView[] ivStatus = new ImageView[5];
  CardView[] cvAuftrag = new CardView[5];

  private void initialize() {
    tvAuftrag[0] = findViewById(R.id.tvAuftrag1);
    tvAuftrag[1] = findViewById(R.id.tvAuftrag2);
    tvAuftrag[2] = findViewById(R.id.tvAuftrag3);
    tvAuftrag[3] = findViewById(R.id.tvAuftrag4);
    tvAuftrag[4] = findViewById(R.id.tvAuftrag5);
    ivStatus[0] = findViewById(R.id.ivStatus1);
    ivStatus[1] = findViewById(R.id.ivStatus2);
    ivStatus[2] = findViewById(R.id.ivStatus3);
    ivStatus[3] = findViewById(R.id.ivStatus4);
    ivStatus[4] = findViewById(R.id.ivStatus5);
    cvAuftrag[0] = findViewById(R.id.cvAuftrag1);
    cvAuftrag[1] = findViewById(R.id.cvAuftrag2);
    cvAuftrag[2] = findViewById(R.id.cvAuftrag3);
    cvAuftrag[3] = findViewById(R.id.cvAuftrag4);
    cvAuftrag[4] = findViewById(R.id.cvAuftrag5);
  }
}

Is there a better solution to initialize the Views into an array? I tried an ArrayList like:

public class Klasse {
  List<TextView> tvAuftrag = ArrayList<>();

  private void initialize() {
    tvAuftrag.add(findViewById(R.id.tvAuftrag1));
    tvAuftrag.add(findViewById(R.id.tvAuftrag2));
    tvAuftrag.add(findViewById(R.id.tvAuftrag3));
    tvAuftrag.add(findViewById(R.id.tvAuftrag4));
    tvAuftrag.add(findViewById(R.id.tvAuftrag5));
  }
}

Maybe this could be a little bit better then the above solution but it does not work. Or is it even possible to work with a loop? Then the IDs must me iterable i think but how could this be possible? Any help or new information to learn about would be highly appreciated.

Markus Kauppinen
  • 3,025
  • 4
  • 20
  • 30
Matthias Neubert
  • 275
  • 1
  • 5
  • 24

2 Answers2

0

//what you want to do is to keep it in a list if it is not an array;

public class Klasse {
  List<TextView> tvAuftrag = new ArrayList<>();

  private void initialize() {
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag1));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag2));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag3));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag4));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag5));
  }
}
0

Add the views in a loop, like:

    TextView[] tvAuftrag = new TextView[5];
    ImageView[] ivStatus = new ImageView[5];
    CardView[] cvAuftrag = new CardView[5];

    int id = 0;

    for (int i = 0; i < tvAuftrag.length; i++) {
        id = getResources().getIdentifier("tvAuftrag" + (i + 1), "id", getPackageName());
        tvAuftrag[i] = findViewById(id);
        id = getResources().getIdentifier("ivStatus" + (i + 1), "id", getPackageName());
        ivStatus[i] = findViewById(id);
        id = getResources().getIdentifier("cvAuftrag" + (i + 1), "id", getPackageName());
        cvAuftrag[i] = findViewById(id);
    }

If the lengh of the 3 arrays is not the same then you must have 3 similar but distinct loops.

  • This could be the most promising solution but maybe a mix of the two solutions of yours and Veysel Sebu could be a smart way to solve it. I'll check within the next 6 hours – Matthias Neubert Aug 15 '18 at 08:13