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