2011-01-26 33 views
52

Tôi có chế độ xem với radio, đầu vào và nút và khi tôi nhấp vào, tôi muốn kiểm tra xem tất cả các yếu tố đầu vào có chứa thông tin hay không. Làm cách nào để tôi có thể lặp qua các yếu tố của chế độ xem trong hoạt động và kiểm tra xem mỗi lần xem văn bản có đáp ứng được yêu cầu nói trên không? Cảm ơn.Cách lặp qua các yếu tố của khung nhìn

Trả lời

108

Tôi đã thực hiện điều gì đó tương tự trong một số mã mà tôi không có với tôi vào lúc này, nhưng từ bộ nhớ, nó phải giống như thế này (giả sử chế độ xem bố mẹ LinearLayout có id là "bố cục"):

LinearLayout layout = (LinearLayout)findViewById(R.id.layout); 
boolean success = formIsValid(layout); 

public boolean formIsValid(LinearLayout layout) { 
    for (int i = 0; i < layout.getChildCount(); i++) { 
     View v = layout.getChildAt(i); 
     if (v instanceof EditText) { 
      //validate your EditText here 
     } else if (v instanceof RadioButton) { 
      //validate RadioButton 
     } //etc. If it fails anywhere, just return false. 
    } 
    return true; 
} 
+0

Tôi thích việc bạn sử dụng getClass. Tôi đoán trong một cái bàn hoặc một cái nhìn kiểu container tương tự, người ta có thể sử dụng một cuộc gọi đệ quy để đón những đứa trẻ bên trong đó, đúng không? – Lumis

+1

Câu hỏi hay! Tôi sẽ nghĩ như vậy. Tôi cho rằng bạn có thể làm cho hàm formIsValid lấy một tham số View chung, và cast, để bạn có thể làm một cái gì đó như 'if (c == TableLayout.class) nếu (! FormIsValid (v)) trả về false;'. Bạn sẽ phải đảm bảo không chỉ trả về true sau khi bố trí lồng nhau để tránh bị loại bỏ trước khi hoàn thành phần còn lại của biểu mẫu ban đầu. – kcoppock

+0

Đó là chính xác trường hợp của tôi, getChildAt() trả về tablerows chỉ. – xain

0

onClickListener của bạn cung cấp đối tượng View v; sử dụng View rV = v.getRootView() để định vị chính bạn trên biểu mẫu. Sau đó, sử dụng rV.findViewWithTag(...) hoặc rV.findViewByID(R.id. ...) để tìm các yếu tố biểu mẫu của bạn.

+1

Cảm ơn trả lời của bạn, nhưng có nhận được một "chung" cách hơn. Một cái gì đó như "lặp qua tất cả các phần tử của khung nhìn có kiểu TextView". – xain

+0

Tôi nghĩ rằng cũng như nhưng vô ích ... – gssi

14

để áp dụng phương pháp này bởi kcoppock đệ quy, bạn có thể thay đổi nó như thế này:

private void loopViews(ViewGroup view) { 
    for (int i = 0; i < view.getChildCount(); i++) { 
     View v = view.getChildAt(i); 

     if (v instanceof EditText) { 
      // Do something 

     } else if (v instanceof ViewGroup) { 

      this.loopViews((ViewGroup) v); 
     } 
    } 
} 
Các vấn đề liên quan