donglua / PhotoPicker

[DEPRECATED] Image Picker like Wechat
https://play.google.com/store/apps/details?id=me.iwf.PhotoPickerDemo
Apache License 2.0
2.83k stars 683 forks source link

怎么移植到eclipse中? #15

Closed wangkunlin closed 9 years ago

wangkunlin commented 9 years ago

如题。那么多的依赖。。。

donglua commented 9 years ago

其实也没多少个依赖,有三个是android官方的库,把另外两个的jar包引入就可以了。

wangkunlin commented 9 years ago

我跑了一下你的demo发现几个问题: 1、选择图片过程中,点击手机的物理menu按键弹出一个 完成(x/x),然后点返回,然后再勾选图片,发现右上角的数字不会增长了。 2、选择完图片后,在结果界面进入浏览,点击最后一张的删除,程序崩溃,估计是越界了。 3、点击拍照,完成拍照后,选择相册的listview数量增多1倍有时2倍。

donglua commented 9 years ago

第1个bug我刚改了,另外两个没能重现,请问是什么机型

donglua commented 9 years ago

menu的问题是因为点击menu按钮的时候又调了一次onCreateOptionsMenu,导致拿到的完成按钮变成了新弹出的那一个~

wangkunlin commented 9 years ago

我的手机是一加

wangkunlin commented 9 years ago

当拍照完成后会触发

public void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    mContext.sendBroadcast(mediaScanIntent);
  }

而在PhotoPickerFragment中有这样一段代码,

MediaStoreHelper.getPhotoDirs(getActivity(),
        new MediaStoreHelper.PhotosResultCallback() {
          @Override public void onResultCallback(List<PhotoDirectory> directories) {
            photoGridAdapter.notifyDataSetChanged();
            PhotoPickerFragment.this.directories.addAll(directories);
            listAdapter.notifyDataSetChanged();
          }
        });

我发现,这段代码不光启动PhotoPickerFragment时会执行,在执行完成扫面图片广播够也会被触发,所以我断定是在这个地方导致了相册数以及图片翻倍,我把你的代码移植过来后加了如下判断

if (PhotoPickerFragment.this.directories.size() > 0) {
      PhotoPickerFragment.this.directories.clear();
 }

就没有发生重复的现象。

wangkunlin commented 9 years ago

崩溃的问题我看了一下log

java.lang.NullPointerException
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3837)
at android.view.ViewGroup.removeViewAt(ViewGroup.java:3801)
at me.iwf.photopicker.PhotoPagerActivity.onOptionsItemSelected(PhotoPagerActivity.java:123)

其中第123行代码是

if (pagerFragment.getPaths().size() <= 1) {
     ......
 } else {
        snackbar.show();
        pagerFragment.getPaths().remove(index);
        pagerFragment.getViewPager().removeViewAt(index); // 123
        pagerFragment.getViewPager().getAdapter().notifyDataSetChanged();
 }

我刚才又试了一下,如果删除倒数第二张,则会跳到最后一张,此时点删除没问题,如果直接删除最后一张,就崩溃了。

donglua commented 9 years ago

我更新了一个版本,修复了以上问题,试下

wangkunlin commented 9 years ago

ok 我更新下 看看