2012-05-18 28 views
5

Tôi có 4 TextViews, 2 ImageViews, 2 Buttons và 2 tiện ích con là một phần của định nghĩa hàng trong một ListView. Dữ liệu đến từ XML và SimpleAdapter. Để truy cập vào các số TextViews này, tôi triển khai ViewBinde r trong một lớp tùy chỉnh và ghi đè số setViewValue. Điều này làm việc và hai TextViews Tôi muốn thay đổi động được xử lý trong setViewValue. Điều gây nhầm lẫn với tôi là tại sao hai TextView khác của tôi không được chuyển qua setViewValue. Tôi nói điều này dựa trên thiết lập một điểm ngắt nơi mà các chuỗi thực hiện chỉ nhập hai lần. Tôi đã mong đợi để xem nó 4 hoặc nhiều lần?Hiểu rõ hơn về ViewBinder của SimpleAdapter

Đây là số setViewValue nơi tôi có bộ điểm ngắt.

@Override  
public boolean setViewValue(View view, Object data, String text) 
{ 
    if(view.getId() == R.id.txtvw1) 
    {    
//blah do some stuff 
    } 
    else if (view.getId() == R.id.txtvw2) 
    { 
//Blah do some stuff 
    } 

    return true; 
} 

khai xml của TextViews (1 show và 4 không):

<TextView 
     android:id="@+id/txtvw1" 
     android:layout_centerHorizontal="true" 
     android:layout_width="185dp" 
     android:layout_height="25dp" 
     android:textSize="20sp" 
     android:layout_marginTop="60dp" 
     android:gravity="center" 
     android:inputType="none" 
     android:text="@string/str_StaticA" 
     android:textColor="#C0F700" /> 

    <TextView 
     android:id="@+id/txtvw4" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="35dp" 
     android:layout_width="95dp" 
     android:layout_height="50dp" 
     android:textSize="18dp" 
     android:layout_marginTop="110dp" 
     android:gravity="center" 
     android:inputType="none" 
     android:text="IMHO:" 
     android:textColor="#FFBA19" /> 

Vì vậy, trong bản tóm tắt tại sao việc thực hiện nhập override chỉ hai lần VÀ nó chỉ như vậy sẽ xảy ra là chính xác hai tôi muốn cập nhật?

Cũng thông qua việc đọc thêm và lý luận suy luận thêm một vài thông tin đã được đưa ra ánh sáng. Trong tâm trí của tôi bao giờ Xem trong các hàng ListView XML sẽ đi qua các ViewBinder nhưng đó là WRONG! Từ những gì tôi có thể tìm, bạn đính kèm ViewBinder vào DataAdapter qua setViewBinder. Kể từ khi DataAdapter được cho biết những gì View (s) sử dụng để cư trú dữ liệu trong nó nó có ý nghĩa rằng chỉ có hai được hiển thị. Tôi chỉ tiết lộ hai cho nó.

Dưới đây là một đoạn mà tôi xác định xem tham gia vào quá trình populating và vượt qua chúng vào constructor của DataAdapter:

String[] from = new String[] {"txtvw_PrevLift", "txtvw_PrevReps", "ActuLiftPikr", "ActulRepsPikr" }; 
int[] to = {R.id.txtvw_PrevLift, R.id.txtvw_PrevReps, R.id.ActuLiftPikr, R.id.ActulRepsPikr }; 

LiftDataAdapter LiftDataAdapter = new LiftDataAdapter(this, LiftDataMaps, R.layout.liftdatalayout, from, to); 

Trong khi điều này dường như có ý nghĩa tôi không biết rằng lập luận suy của tôi là chính xác. Sẽ cập nhật khi tôi tìm thêm thông tin.

Trả lời

5

Nếu bạn đặt một ViewBinder trên SimpleAdaptertất cả các Views bạn khai báo (trong to mảng trong trường hợp của bạn) sẽ được chuyển đến setViewValue() phương pháp 's ViewBinder không có vấn đề gì. Nếu phương pháp setViewValue không trả lại true nghĩa là ràng buộc dữ liệu cho rằng View không thành công (vì bất kỳ lý do gì) thì bạn sẽ nhận được hành động mặc định (cho TextView), đặt văn bản từ dữ liệu Hashmap. Ngay bây giờ, bạn đã tuyên bố số setViewValue để làm điều gì đó chỉ cho hai số TextViews (kiểm tra bằng id của chúng) và cũng để trả lại truebất kể số là gì. Khi bạn nhập setViewValue cho Views khác trong bố cục hàng của bạn, bạn sẽ nhập lại setViewValue, không khớp với các id (vì vậy không có bản cập nhật cho các số Views) và trả lại true (sẽ cho bộ điều hợp biết rằng ràng buộc đó là thành công và điều này View không yêu cầu thêm bất kỳ công việc nào). A look at the source code cho phương pháp SimpleAdapter.bindView sẽ cho bạn biết cách sử dụng ViewBinder.

Ngoài ra, tôi thấy rằng bạn sử dụng bộ điều hợp tùy chỉnh, bạn có chắc chắn bạn không can thiệp vào logic SimpleAdapter bình thường không?(cũng không sử dụng cùng tên cho lớp và tên biến)

+0

Roger đặt tên cho lớp và biến giống nhau. Bạn đã đúng và tôi chỉ cần gõ nhanh để đăng. Đối với trở về sự thật tôi hiểu những gì bạn đang sayng bởi LUÔN trở về đúng từ setViewValue. Tôi đang nhìn vào liên kết được cung cấp ngay bây giờ để tìm một cách tốt hơn để trở về từ setViewValue vì vậy nó là chính xác không chỉ hardcoded. – GPGVM

+1

Dude tuyệt vời. Tôi không biết bạn có thể có được một cái nhìn vào mã nguồn như thế. Double Cảm ơn bạn. – GPGVM