0

こんにちは、フラグメント遷移中にプログレスバーを設定しようとしています。最初のフラグメント onClick が 2 番目のフラグメントを呼び出します。これは、表示される前に重い作業を行います。この重い作業は、キャッシュにある html からの解析であるため、asynctask を使用しません。

これを機能させる最善のアプローチは何ですか?!

私の最初のフラグメント:

private void onClick(final MoodleCourseContent[] courseContent,
        View layout, final int contentIdx) {

    layout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String courseId = Integer.toString(v.getId());
            String courseName = courseContent[contentIdx].getName();
            String topicId = (String) v.getTag();

            Bundle bundle = new Bundle();
            bundle.putString("courseId", courseId);
            bundle.putString("courseName", courseName);
            bundle.putString("topicId", topicId);

            FragmentManager fragmentManager = getActivity()
                    .getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();

            FragTopics insideTopicsFrag = new FragTopics();
            insideTopicsFrag.setArguments(bundle);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction
                    .replace(R.id.mainFragment, insideTopicsFrag);
            fragmentTransaction.commit();
        }
    });
}....

私の2番目のフラグメント:

public class FragTopics extends Fragment {

Object course;
// ManSession Manager Class
ManSession session;
String courseId;
Long topicId;
String courseName;

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onViewCreated(view, savedInstanceState);
}

public FragTopics() {
}

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
}

@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");

    MoodleCourseContent[] courseTopics = new ManContents(getActivity()
            .getApplicationContext()).getContent(courseId);

    MoodleCourseContent singleTopic = new ManContents(getActivity()
            .getApplicationContext()).getTopic(topicId, courseTopics);

    return createTopics(singleTopic, courseName, courseId, topicId);
}......
4

1 に答える 1

2

最善の方法は、別のスレッド/AsyncTask で重い作業を行うことです。プログレス バーが正しく表示されたとしても、UI スレッドで十分に応答しないと、アプリが「アプリケーションが応答していません」で終了する危険性があります。

とはいえ、プログレス バーを表示する最も簡単な方法は、デフォルトでなくなったホスティング アクティビティのレイアウトの一部にすることです。最初のフラグメントは、2 番目のフラグメントを開始する前に、それを可視に設定します。2 番目のフラグメントが読み込まれると、プログレス バーが検出され、表示されなくなった状態に戻ります。

于 2013-11-02T21:26:50.747 に答える