2

こんにちは、私はここにいます。なぜなら、Asynctask または新しいスレッドでフラグメント トランザクションを実行して以来、ほとんどすべてを試してきたからです。

私が試したこと:

リンク

リンク

リンク

その他

私の問題:

  • フラグメントはいくつかの重い作業を行うので、asynctask を内部に実装しました
  • フラグメントですが、フラグメントを更新できません
  • フラグメントに置き換えると UI がフリーズする
  • すべてのビューをプログラムで作成します
  • 私のフラグメントはビューを返します
  • フラグの準備ができていない間、プログレスバーを表示するふりをします

私のメイン:

 Bundle bundle = getIntent().getExtras();
        FragmentTransaction fragmentTransaction = getFragmentManager()
                .beginTransaction();
        FragTopics insideTopicsFrag = new FragTopics();
        insideTopicsFrag.setArguments(bundle);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.replace(R.id.mainFragment, insideTopicsFrag);
        fragmentTransaction.commit();

私のフラグメント: createTopics は、すべてのコンテンツを含むビューを返します。つまり、過去に onCreateView で返されたビューです。

public class FragTopics extends Fragment {
View v;
public FragTopics() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    v = new View(getActivity());
    new TopicsAsyncTask().execute();
    return v;
}
private class TopicsAsyncTask extends AsyncTask<Void, Void, Boolean> {
    ManSession session;
    String courseId;
    Long topicId;
    String courseName;
    MoodleCourseContent[] courseTopics;
    MoodleCourseContent singleTopic;
        private final ProgressDialog dialog = new ProgressDialog(getActivity());
    @Override
    protected void onPreExecute() {
        this.dialog.setMessage("loading...");
        this.dialog.show();
    }
    @Override
    protected Boolean doInBackground(Void... params) {
        ObtainData();
        return true;
    }
    @Override
    protected void onPostExecute(Boolean result) {
        this.dialog.dismiss();
        // The createTopics returns the View with all contents
        v = createTopics(singleTopic, courseName, courseId, topicId);

    }
}
4

1 に答える 1