필자의 onCreate 메소드에서 5 번 반복되는 루프가있는 함수를 호출하여 다른 레이아웃을 부 풀린 다음 LinearLayout에 추가하는 빈 LinearLayout을 선언했습니다.ProgressBar의 고유 ID가 필요한 이유는 무엇입니까?
private void setupList() {
LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout itemList = (LinearLayout) findViewById(R.id.itemList);
itemList.removeAllViews();
for (Category category :: categories) {
View rowView = layoutInflater.inflate(R.layout.category_row, null);
initializeRow(rowView, category.percentComplete);
itemList.addView(rowView);
}
}
다음 내 initializeRow 메서드에서 방금보기에있는 TextView 및 ProgressBar를 초기화합니다.
private void initializeRow(final View view, final int percentComplete) {
TextView topicView = ((TextView) view.findViewById(R.id.topic));
topicView.setText(category.title);
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
progressBar.setMax(100);
progressBar.setProgress(percentComplete);
TextView textView = (TextView) view.findViewById(R.id.progressText);
textView.setText(percentComplete "% Complete");
}
이 활동이 처음 생성되면 진행률 표시 줄과 텍스트보기가 적절한 값으로 표시됩니다. 그러나 장치를 회전 시키면 TextViews가 적절한 값으로 표시되지만 모든 ProgressBars는 마지막 ProgressBar에 해당하는 진행률을 표시합니다. onCreate가 처음에 호출 될 때이 기능이 작동하지만 장치가 회전 된 후에 onCreate 메서드가 호출되지 않는 이유는 무엇입니까?
모든 ProgressBars가 동일한 ID를 가지고 있다는 것을 알고 있습니다. 하지만 내 코드에서 내가 부풀린 뷰의 findViewById를 사용하여 특정 ProgressBar에 대한 참조를 얻고 있습니다. 내 initializeRow 메서드에서
progressBar.setId(progressBarIds[ position ]);
을 호출하여 각 ProgressBar에 고유 한 ID를 부여하여이 작업을 수행 할 수있었습니다. 이 동작이 ProgressBar의 버그의 결과인지 또는 내가 이해하지 못하는 layoutInflaters 또는 ProgressBars에 대한 규칙이 있는지 궁금합니다.