2013-02-28 41 views
5

Tôi basicall có một số AsyncTask (chạy từ chính Activity) điền một ViewPager bên trong một đoạn. Tôi đang thổi phồng tệp bố cục xml để điền vào số ViewPager.getView() trả về null

Vấn đề là tôi không thể có được con trỏ đến các khung nhìn bên trong bố trí (imageview, textview) để tôi có thể thay đổi sau đó khi chạy. Tôi biết đó có thể là vì getView() trả lại null. Tôi đã đọc rằng có lẽ vì chưa có ai gọi đến số onCreateView(). Có ai biết tôi có thể làm gì để giải quyết chuyện này không?


Mã của tôi hiện hơi lộn xộn.

Dưới đây là một lời giải thích đơn giản hơn với những gì tôi đang làm:

  1. MainActivity AsyncTask populates một cơ sở dữ liệu và gửi con trỏ đến Fragment. Một cái gì đó như SendToFragement (db);
  2. Phương thức phân đoạn ReceiveFromActivity (db) nhận con trỏ db và điền vào ViewPager.

Nó hoạt động tốt nếu tôi chỉ tạo TextView, thiết lập văn bản và thêm TextViews vào Viewpager. Nhưng, tất nhiên, tôi muốn làm cho nó trông đẹp hơn vì vậy tôi đã thổi phồng một bố cục xml. Vấn đề là tôi không thể thay đổi nội dung của bố cục xml vì getView() đang trả về NULL vì vậy getView().findViewById() không hoạt động.

+1

bài một số mã .... – Shiv

+0

Làm thế nào về một số mã, vì vậy chúng tôi có thể chỉ ra nơi mà vấn đề của bạn, và đề xuất một sửa chữa. – tolgap

+0

Bạn không thể làm việc trên chuỗi giao diện người dùng từ 'doInBackground()' -method. Sử dụng ['onProgressUpdate()'] (http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate%28Progress...%29) để hiển thị kết quả trên giao diện người dùng. –

Trả lời

7

Tùy thuộc vào việc triển khai PagerAdapter của bạn, có thể một Fragment không còn trong chế độ xem sẽ bị hủy View để giải phóng tài nguyên. Do đó, không cần phải cập nhật View vì nó sẽ được tạo lại trong onCreateView() với thông tin được cập nhật. getView() sẽ trả lại một lượt xem giữa các cuộc gọi đến onCreateView()onDestroyView(). Ngoài ra, Fragment vẫn có thể tồn tại trong bộ nhớ nhưng không được đính kèm với bất kỳ View nào, do đó getView() sẽ trả lại null.

Vì vậy, về cơ bản,

View fragmentView = getView(); 
if(fragmentView != null) { 
    // we are in view or at least exist. Update the elements. 
} 
// Else don't worry about it. Just update the data. 
+0

Thật kỳ lạ. Tôi đã thử điều này 'Xem fragmentView = getView(); if (fragmentView! = Null) {ImageView img = (ImageView) fragmentView.findViewById (R.id.imageView1); \t \t \t \t img.setImageResource (R.drawable.gasguy);} ' nhưng tôi vẫn nhận được miễn con trỏ NULL. – user1923613

+0

Câu lệnh if là true nếu fragmentView là null. Hãy thử '! =' Để thay thế. – DeeV

+0

Xin lỗi, ý tôi là '(fragmentView! = Null)' – user1923613