Android在片段中使用进度条

Android在片段中使用进度条,android,android-fragments,progress-bar,Android,Android Fragments,Progress Bar,我一直在尝试制作一个片段,在加载进度条时可以检索图像。但当片段调用doWork时,它会使应用程序崩溃。图像的导入是一个值得注意的问题。 我试着用一些简单的东西,比如展示一个祝酒词,然后崩溃 这在活动中非常有效,但在片段中却不起作用 这是我的密码: 主要活动: public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstan

我一直在尝试制作一个片段,在加载进度条时可以检索图像。但当片段调用doWork时,它会使应用程序崩溃。图像的导入是一个值得注意的问题。 我试着用一些简单的东西,比如展示一个祝酒词,然后崩溃

这在活动中非常有效,但在片段中却不起作用

这是我的密码:

主要活动:

    public class MainActivity extends FragmentActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    public void setLayout(View view){
        PictureLoader pictureLoader = new PictureLoader();  
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(R.id.fragmentContainer, pictureLoader);
        transaction.commit();   
    }
}
片段:

public class PictureLoader extends Fragment{
    ImageView iv;
    ProgressBar progress;
    int progressStatus;
    Handler mHandler;
    int progressValue;

    @Override
    public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.photo_loader,container, false);

    progress = (ProgressBar)view.findViewById(R.id.progressBar1);
    mHandler = new Handler();
     progress.setVisibility(View.GONE);

    iv = (ImageView)view.findViewById(R.id.imageView1);
        loadImage();
    return view;

    }

public void loadImage(){

    progress.setVisibility(View.VISIBLE);
     new Thread(new Runnable() {
         public void run() {


             while (progressStatus < 100) {
                 progressStatus = doWork();

                 // Update the progress bar
                 mHandler.post(new Runnable() {
                     public void run() {
                        progress.setProgress(progressStatus);
                     }
                 });
             }

             if (progressStatus >= 100) {
                 progress.setVisibility(View.GONE);

             }
         }

        private int doWork() {

                File picturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                File outputDir = new File(picturesDir, "All pictures");
                Bitmap bitmap = BitmapFactory.decodeFile(outputDir.getPath() + "/" + "IMG_201407211_183804.jpg");
                iv.setImageBitmap(bitmap);
            Toast.makeText(getActivity(), "Done", Toast.LENGTH_LONG).show();
                return 100;
        }
     }).start();


}


}
日志:


我希望你能帮助我。谢谢

这一行是从后台线程执行的。但是它涉及到一个UI元素,所以它会崩溃

progress.setVisibility(View.GONE);
只有UI线程可以触摸UI小部件

CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
改为这样做:

 if (progressStatus >= 100) {
     mHandler.post(new Runnable() {
         public void run() {
            progress.setVisibility(View.GONE);
         }
     });
 }

它将不再崩溃,但您应该真正了解AsyncTask。

明白了,但我如何应用此图像。我正在尝试建立一个画廊,我需要这样的功能,以避免延迟时,有太多的图像。
 if (progressStatus >= 100) {
     mHandler.post(new Runnable() {
         public void run() {
            progress.setVisibility(View.GONE);
         }
     });
 }