【问题标题】:Display black blank screen while showing folderwisw all photo from gallery显示文件夹中的所有照片时显示黑色空白屏幕
【发布时间】:2017-03-30 06:10:40
【问题描述】:

您好,我开发了一个应用程序,我想在文件夹中显示存储中的所有照片。我为它实现了代码,但问题是创建活动时它会显示黑色空白屏幕 5 秒,然后显示所有文件夹。

这是我的代码:

public class ImageWithFolder extends AppCompatActivity implements AdapterView.OnItemClickListener {

  List<GridViewItem> gridItems = new ArrayList<GridViewItem>();
  String redirect;
  GridView gridView;
  Bitmap bitmap;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_imagefolder);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
    setSupportActionBar(toolbar);
    final ActionBar ab = getSupportActionBar();
    assert ab != null;
    ab.setDisplayHomeAsUpEnabled(true);
    Intent ii = getIntent();
    redirect = ii.getStringExtra("next_activity");
    gridView = (GridView) findViewById(R.id.gridView);
    setGridAdapter();
  }

  private void setGridAdapter() {

    createGridItems(Environment.getExternalStorageDirectory().getAbsolutePath());
    MyGridAdapter adapter = new MyGridAdapter(this, gridItems);
    gridView.setAdapter(adapter);
    gridView.setOnItemClickListener(this);

  }

  private void createGridItems(String directoryPath) {

    File[] files = new File(directoryPath).listFiles(new ImageFileFilter());
    for (File file : files) {
      if (file.isDirectory()) {
        if (file.listFiles((new DirFilter())).length > 0) {
          createGridItems(file.getAbsolutePath());
        }
        if (file.listFiles((new ImageFilter())).length > 0) {
          gridItems.add(new GridViewItem(file.getAbsolutePath(), true, null));
        }

      }
    }
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case android.R.id.home: {
        finish();
      }
      return true;
    }
    return super.onOptionsItemSelected(item);
  }

  private boolean isImageFile(String filePath) {
    if (filePath.endsWith(".jpg") || filePath.endsWith(".png") || filePath.endsWith(".jpeg")) {
      return true;
    }
    return false;
  }

  @Override
  public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    if (redirect.equalsIgnoreCase("1")) {
      Intent ii = new Intent(ImageWithFolder.this, SelectPhotos.class);
      ii.putExtra("path", gridItems.get(i).getPath());
      startActivity(ii);
    } else if (redirect.equalsIgnoreCase("2")) {
      Intent ii = new Intent(ImageWithFolder.this, AlbumSelectPhotos.class);
      ii.putExtra("path", gridItems.get(i).getPath());
      startActivity(ii);
    }
  }

  private class ImageFileFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
      if (file.isDirectory()) {
        return true;
      } else if (isImageFile(file.getAbsolutePath())) {
        return true;
      }
      return false;
    }
  }

  private class ImageFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
      if (isImageFile(file.getAbsolutePath())) {
        return true;
      }
      return false;
    }
  }

  private class DirFilter implements FileFilter {
    @Override
    public boolean accept(File file) {
      if (file.isDirectory()) {
        return true;
      }
      return false;
    }
  }

}

我不明白代码出了什么问题。

谁能给出第一次出现黑屏的解决办法。

提前致谢。

【问题讨论】:

  • 您是否在 Android Studio 中启用了 Instant Run 功能?

标签: android gridview image-gallery


【解决方案1】:

将你的读取文件方法放在异步中..

Call Aysnc:

new LoadData().execute()


public class LoadData extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }


        @Override
        protected Void doInBackground(Void... params) {
             createGridItems(Environment.getExternalStorageDirectory().getAbsolutePath());
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            MyGridAdapter adapter = new MyGridAdapter(this, gridItems);
            gridView.setAdapter(adapter);
            gridView.setOnItemClickListener(this);
        }
    }

如果您对 RxJava 感到满意,请使用 Observal,这是最好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    相关资源
    最近更新 更多