【问题标题】:Android progressbar while fragment transition片段转换时的Android进度条
【发布时间】:2013-11-13 18:55:31
【问题描述】:

大家好,我正在尝试在片段转换时设置进度条,我的第一个片段 onClick 调用第二个片段,这将在显示之前做一些繁重的工作。 这项繁重的工作不使用 asynctask,因为它是从缓存中的 html 解析。

使这项工作的最佳方法是什么?!

我的第一个片段:

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();
        }
    });
}....

我的第二个片段:

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);
}......

【问题讨论】:

  • 如果你有很多繁重的计算,最好的方法可能是在异步任务中完成它,或者在另一个线程中。否则在计算完成之前您将无法渲染片段,然后您将无法显示进度条。
  • 是的,我假设这是唯一的方法,我正在避免这样做,因为我必须改变很多事情,但如果没有其他方法,我将不得不这样做

标签: android android-fragments android-progressbar


【解决方案1】:

最好的方法是在另一个线程/AsyncTask 中完成繁重的工作。即使您的进度条正确显示,如果您在 UI 线程上的响应速度不够快,您仍然有可能因“应用程序无响应”而终止您的应用程序。

也就是说,显示进度条的最简单方法是使其成为默认情况下已消失的托管活动布局的一部分。第一个片段在开始第二个片段之前将其设置为可见。第二个片段一旦加载,就会找到进度条并将其设置回消失。

【讨论】:

  • 昨天我尝试用片段实现异步任务但效果不佳,你能帮忙吗? asyncTask 的一些示例
  • 你能看看这个问题是否与此有关,我被困stackoverflow.com/questions/20460170/…
猜你喜欢
  • 2017-09-24
  • 1970-01-01
  • 2012-12-13
  • 2019-08-17
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
相关资源
最近更新 更多