代码改进:视图列表
Code improving: List of Views
我有以下代码:
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);
}
}
有没有更好的方法将Views初始化成数组?我尝试了一个像这样的 ArrayList:
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));
}
}
也许这比上面的解决方案好一点,但它不起作用。或者甚至可以使用循环?那么我认为 ID 必须是可迭代的,但这怎么可能呢?
任何帮助或要了解的新信息将不胜感激。
//你要做的是,如果不是数组就放在列表中;
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));
}
}
循环添加视图,例如:
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);
}
如果 3 个数组的长度不同,那么你必须有 3 个相似但不同的循环。
我有以下代码:
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);
}
}
有没有更好的方法将Views初始化成数组?我尝试了一个像这样的 ArrayList:
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));
}
}
也许这比上面的解决方案好一点,但它不起作用。或者甚至可以使用循环?那么我认为 ID 必须是可迭代的,但这怎么可能呢? 任何帮助或要了解的新信息将不胜感激。
//你要做的是,如果不是数组就放在列表中;
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));
}
}
循环添加视图,例如:
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);
}
如果 3 个数组的长度不同,那么你必须有 3 个相似但不同的循环。