我假裝的是顯示一個不確定的進度條(目前只是一個用於測試目的的對話框),而我的第二個片段正在獲取數據並構建視圖而不凍結UI。使用Asynctask更新片段後的視圖重疊
我已經試過:
- 的AsyncTask
- 裝載機
- 裝載機AsyncTaskLoader
- 適配器(沒試過,但也許它的一個選項,但我不知道如何 使用適配器與自定義佈局)
隨着asynctask方法幾乎一切正常,但onPostE xecute我必須更新片段來做到這一點,我創建了一個接口,在主要活動中,我刪除了視圖並添加了新的視圖,但是由於我創建了另一個問題,我的後臺堆棧已經混亂,所以我沒有選項。
的圖,以幫助瞭解它是如何工作的:
我的片段2:
public class FragTopics extends Fragment {
Object course;
ManSession session;
String courseId;
Long topicId;
String courseName;
private LinearLayout mainLayout;
private ScrollView contentScrollable;
private LinearLayout contentsLayout;
private View myView;
public FragTopics() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
session = new ManSession(getActivity().getApplicationContext());
courseId = getArguments().getString("courseId");
topicId = Long.parseLong(getArguments().getString("topicId"));
courseName = getArguments().getString("courseName");
new HeavyWork().execute();
// Create empty view because i need to return something
myView = new View(getActivity());
return myView;
}
private class HeavyWork extends AsyncTask<Void, Void, Void> {
private ProgressDialog dialog;
final FragmentUpdater activity = (FragmentUpdater) getActivity();
// Do the long-running work in here
@Override
protected Void doInBackground(Void... params) {
MoodleCourseContent[] courseTopics = new ManContents(getActivity()
.getApplicationContext()).getContent(courseId);
MoodleCourseContent singleTopic = new ManContents(getActivity()
.getApplicationContext()).getTopic(topicId, courseTopics);
// This createTopics call another methods from the fragment class to
// get the data and create views
myView = createTopics(singleTopic, courseName, courseId, topicId);
return null;
}
protected void onPreExecute() {
dialog = new ProgressDialog(getActivity());
dialog.show();
}
// This is called when doInBackground() is finished
@Override
protected void onPostExecute(Void ignore) {
activity.updater(myView);
dialog.dismiss();
}
}
我的界面:
public interface FragmentUpdater {
public void updater(View param);
}
我的主要活動,其中的接口被實現:
@Override
public void updater(View param) {
ViewGroup vg = (ViewGroup) findViewById (R.id.main_content);
vg.removeAllViews();
vg.addView(param);
}
個
我的佈局創建程序,這是結構:
->LinearLayout
->TextView
->ScrollView
->LinearLayout
我的主要問題是如何,而片段2不凍結UI,如果我的上述做法是正確的,如何初始化顯示進度條該heavyWork換句話說就是做了更新後的片段視圖的AsyncTask完成做後臺工作
刪除畢竟視圖後,並添加新的onBackpressed會覆蓋我的看法與以前的片段意見
你最主要的問題是什麼?我不明白你在問什麼? – sockeqwe
我更新了這個問題,我的主要問題是如何在不凍結UI的情況下初始化片段2的同時顯示進度條,並且如果我的上述方法是正確的,那麼如何在重做之後更新片段中的視圖asyncTask完成後臺工作。但在給予負面點之前閱讀所有內容 – firetrap