2012-12-15 20 views
6

Điều này có vẻ khó hơn hoặc tôi đang làm sai. Tôi cần cập nhật nội dung của các phần tử giao diện người dùng trong một đoạn.Làm thế nào để thực hiện AsyncTask <> nằm trong một đoạn từ cha mẹ của nó?

Vì vậy, trong vòng một Activity, tôi bắt đầu AsyncTask nhiệm vụ như

new MyAsyncTask().execute(); 

Bên trong "bình thường" class Activity async này đây là private vì vậy tôi nghĩ rằng tôi có thể làm cho nó public bên trong lớp đoạn và sau đó có thể gọi nó từ FragmentActivity lớp cha mẹ. Một cái gì đó như thế này:

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.layout.my_fragment); 
new myFragment.DoParsingAsyncTask().execute(""); //??? a silly guess 

không hoạt động.

Có ai giúp được không?

PS. Các đoạn của tôi không phải là số <fragment> trong XML, nhưng tôi xử lý chúng thông qua ViewPager. Tôi không gặp vấn đề gì khi hiển thị trang qua ViewPager.
PPS. lớp async này bắt đầu phân tích cú pháp nội dung từ xa và điền vào các phần tử giao diện người dùng trong đoạn.

+1

myFragment.new DoParsingAsyncTask(). Execute (""); ? Ngoài ra, bạn luôn có thể tạo các lớp nhiệm vụ của mình dưới dạng các lớp riêng biệt và sử dụng trình xử lý để cập nhật giao diện người dùng. –

+0

@GeorgyGobozov Tôi đang chuyển đổi lược đồ 'Hoạt động' thành các mảnh và tôi đang cố gắng tìm ra giải pháp đơn giản nhất. Đây chỉ là một dự đoán tồi. – sandalone

+0

myFragment.new DoParsingAsyncTask(). Execute ("") có hoạt động không? Bạn cần tạo các cá thể lớp bên trong bằng cách này. –

Trả lời

8

Nó có thể không giải quyết được vấn đề, nhưng tạo một phương thức trong đoạn của bạn và gọi đó là để tạo và khởi động tác vụ không đồng bộ. Nó sẽ chỉ gọn gàng hơn. Đây là mã.

Từ Fragment gọi phương thức như thế này.

Activity myActivity = getActivity(); 
if (myActivity instanceof MyActivity) { 
    ((MyActivity) myActivity).doAsyncTaskMethod(); 
} 

Hoặc bạn có thể thử giải pháp mà tôi đã đề xuất.

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.layout.my_fragment); 
myFragment.new DoParsingAsyncTask().execute(""); 

Hoạt động tốt.

+0

Cảm ơn vì điều đó, tôi muốn làm ngược lại (gọi một nhiệm vụ không đồng bộ trong hoạt động lưu trữ từ phân đoạn của nó), và tôi không thể có được cú pháp đúng. Những gì tôi cần là getActivity(). New MyAsyncTask(). Execute() bit :) –

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