ฉันมีซึ่งมีเด็กหลายLinearLayout
TextViews
ฉันจะดูลูกของ LinerLayout โดยใช้ลูปได้อย่างไร?
ฉันมีซึ่งมีเด็กหลายLinearLayout
TextViews
ฉันจะดูลูกของ LinerLayout โดยใช้ลูปได้อย่างไร?
คำตอบ:
การใช้งานและgetChildCount()
getChildAt(int index)
ตัวอย่าง:
LinearLayout ll = …
final int childCount = ll.getChildCount();
for (int i = 0; i < childCount; i++) {
View v = ll.getChildAt(i);
// Do something with v.
// …
}
buttons
เพิ่มในรูปแบบเชิงเส้นแล้วหารด้วย2 ได้อย่างไร? จุดประสงค์ของฉันคือการแสดง 2 แถวของปุ่มโดยใช้รูปแบบเชิงเส้น
((ViewGroup) findViewById(android.R.id.content));// you can use this in an Activity to get your layout root view, then pass it to findAllEdittexts() method below.
ที่นี่ฉันทำซ้ำ EdiTexts เท่านั้นหากคุณต้องการมุมมองทั้งหมดคุณสามารถแทนที่ EditText ด้วย View
SparseArray<EditText> array = new SparseArray<EditText>();
private void findAllEdittexts(ViewGroup viewGroup) {
int count = viewGroup.getChildCount();
for (int i = 0; i < count; i++) {
View view = viewGroup.getChildAt(i);
if (view instanceof ViewGroup)
findAllEdittexts((ViewGroup) view);
else if (view instanceof EditText) {
EditText edittext = (EditText) view;
array.put(editText.getId(), editText);
}
}
}
getChildAt
ส่งคืนเฉพาะเด็กโดยตรง
ใช้สิ่งนี้
final int childCount = mainL.getChildCount();
for (int i = 0; i < childCount; i++) {
View element = mainL.getChildAt(i);
// EditText
if (element instanceof EditText) {
EditText editText = (EditText)element;
System.out.println("ELEMENTS EditText getId=>"+editText.getId()+ " getTag=>"+element.getTag()+
" getText=>"+editText.getText());
}
// CheckBox
if (element instanceof CheckBox) {
CheckBox checkBox = (CheckBox)element;
System.out.println("ELEMENTS CheckBox getId=>"+checkBox.getId()+ " getTag=>"+checkBox.getTag()+
" getText=>"+checkBox.getText()+" isChecked=>"+checkBox.isChecked());
}
// DatePicker
if (element instanceof DatePicker) {
DatePicker datePicker = (DatePicker)element;
System.out.println("ELEMENTS DatePicker getId=>"+datePicker.getId()+ " getTag=>"+datePicker.getTag()+
" getDayOfMonth=>"+datePicker.getDayOfMonth());
}
// Spinner
if (element instanceof Spinner) {
Spinner spinner = (Spinner)element;
System.out.println("ELEMENTS Spinner getId=>"+spinner.getId()+ " getTag=>"+spinner.getTag()+
" getSelectedItemId=>"+spinner.getSelectedItemId()+
" getSelectedItemPosition=>"+spinner.getSelectedItemPosition()+
" getTag(key)=>"+spinner.getTag(spinner.getSelectedItemPosition()));
}
}
มันง่ายขึ้นเมื่อใช้ Kotlin ในการวนลูป:
for (childView in ll.children) {
//childView is a child of ll
}
นี่ll
คือid
ของLinearLayout
กำหนดไว้ในเค้าโครง XML
รับมุมมองทั้งหมดจากการจัดวางทุกประเภท
public List<View> getAllViews(ViewGroup layout){
List<View> views = new ArrayList<>();
for(int i =0; i< layout.getChildCount(); i++){
views.add(layout.getChildAt(i));
}
return views;
}
รับ TextView ทั้งหมดจากเค้าโครงทุกประเภท
public List<TextView> getAllTextViews(ViewGroup layout){
List<TextView> views = new ArrayList<>();
for(int i =0; i< layout.getChildCount(); i++){
View v =layout.getChildAt(i);
if(v instanceof TextView){
views.add((TextView)v);
}
}
return views;
}
รับมุมมองทั้งหมดของมุมมองรวมถึงมุมมองลูก ๆ ใน Kotlin:
private fun View.getAllViews(): List<View> {
if (this !is ViewGroup || childCount == 0) return listOf(this)
return children
.toList()
.flatMap { it.getAllViews() }
.plus(this as View)
}