2012-11-13 43 views
7

Tôi có một ListView với một bộ điều hợp tùy chỉnh, hiển thị thông tin từ một cơ sở dữ liệu. Khi tôi khởi động ứng dụng, dữ liệu được đọc từ cơ sở dữ liệu, được cung cấp cho bộ điều hợp, sau đó được gắn vào ListView. LayoutAnimationController được chạy trên ListView, hiển thị các nội dung trơn tru.Android Listview không cập nhật

this._lvList = (ListView)_v.findViewById(R.id.lvList); 
    this._lvList.setAdapter(new TableAdapter(getActivity(),R.layout.tablerow,Category.getCategories())); 
    LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_left)); 
    lac.setDelay(0.2f); 
    this._lvList.setLayoutAnimation(lac);  
    this._lvList.startLayoutAnimation(); 

Không sao cả.

Bây giờ khi tôi nhấp vào bất kỳ mục nhập nào của ListView, các mục nhập không được nhấp biến mất, mục nhập được nhấp sẽ trở thành mục nhập duy nhất trong danh sách và được hiển thị ở trên cùng, như mong đợi.

View v; 
for(int i = 0;i<_lvList.getChildCount();i++) { 
    v = this._lvList.getChildAt(i); 
    if(v!=clickedView) { 
      Animation animSlideOut = AnimationUtils.loadAnimation(getActivity(), i%2==0?R.anim.slide_out_left:R.anim.slide_out_right); 
      animSlideOut.setStartOffset(i*50); 

      // some more stuff 

    } 
    v.startAnimation(animSlideOut); 
} 

Điều này cũng hoạt động, nhưng bây giờ vấn đề, nếu tôi nhấp lại vào mục nhập danh sách duy nhất đó, tôi muốn danh sách hiển thị lại, hiển thị lại tất cả các mục.

Tôi nghĩ rằng tôi có thể sử dụng mã ngay từ đầu (đoạn đầu tiên), vì nó hoạt động tốt khi bắt đầu ứng dụng, nhưng ... lần này ... không. Không có hoạt ảnh nào xảy ra. Lý do là, không có khung nhìn nào để tạo hiệu ứng động trong ListView của tôi (ngoại trừ cái nhìn từ bước trước đó).

Thay vì tạo ra một TableAdapter mới Tôi đã cố gắng để xóa nó, điền vào nó mới, được gọi là notifyDataSetChanged() ... không sử dụng, như

_lvList.getChildCount(); 

ảnh tĩnh trở lại 1 điểm, trong khi các bộ chuyển đổi nắm giữ tất cả 18 mục. tôi cũng cố gắng

requestLayout(); 
forceLayout(); 
invalidate(); 
invalidateViews(); 

để buộc các ListView để tạo ra quan điểm con của nó trước khi các hình ảnh động, nhưng nó không làm việc. Vì vậy, atm ListView chỉ xuất hiện ngay lập tức, ngay sau khi cuộc gọi của tôi đến hoạt ảnh bố cục.

Tóm tắt: ListView của tôi không chứa chế độ xem con trước khi bắt đầu hoạt ảnh bố cục, làm cách nào tôi có thể bắt buộc phải tạo chúng?

Thx trước :)

+0

bạn có giải quyết vấn đề này không? – dexxtr

+0

@dexxtr xin lỗi, đó là một thời gian dài trước đây, nhưng cuối cùng tôi giải quyết với một hình ảnh động khác nhau, như mã không hoạt động như mong đợi ... –

+0

Tôi đã cố định :) vấn đề nằm trong ngữ cảnh sai, có tham chiếu đến màn hình khác – dexxtr

Trả lời

1

Hmm ... bạn đã làm điều này chưa? (Dưới đây)

trong bộ chuyển đổi tùy chỉnh của bạn, ghi đè phương pháp:

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    //the position of the item, the convertView is the view layout of what that row is 

} 

để thay đổi cách listview được cập nhật. phương pháp getView này được gọi bởi Android mỗi một thời gian một lần để làm mới view (bạn không gọi nó bằng tay)

cũng vậy, tôi nghĩ rằng bạn chỉ cần gọi

listView.notifiyDataSetChanged()listView.invalidate() để buộc các cập nhật, sau khi bạn repopulate danh sách

bạn có thể đọc thêm về listviews đây:

http://www.vogella.com/articles/AndroidListView/article.html

http://developer.android.com/guide/topics/ui/layout/listview.html

+0

Có, tôi có bộ điều hợp tùy chỉnh và tôi có một getView(). Tất cả đều hoạt động khi tôi khởi động ứng dụng, không phải lần thứ hai. Sau khi thông báo ...() và invalidate() tổng số lượt xem của listView vẫn là 1, trong khi adapter chứa 18 mục. –

Các vấn đề liên quan