2017-10-10 52 views
0

我想从图库中选择一些图像并在gridview中显示。我已经使用Filepicker库。它的工作,但我面临的主要问题是,选择后图像不显示在gridview中。我向你展示我的代码。请帮帮我。 这是我的片段类如何在android中的gridview中添加所选图像

fabPhotosAdd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      FilePickerBuilder.getInstance().setSelectedFiles(arrayList) 
        .setActivityTheme(R.style.Theme_AppCompat_Light).pickPhoto(getActivity()); 
     } 
    }); 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
     case FilePickerConst.REQUEST_CODE: 
      if (resultCode == RESULT_OK && data != null) { 
       arrayList = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_PHOTOS); 
       PhotoFragmentModel model; 
       ArrayList<PhotoFragmentModel> list = new ArrayList<>(); 
       try { 
        for (String path : arrayList) { 
         model = new PhotoFragmentModel(); 
         model.setName(path.substring(path.lastIndexOf("/") + 1)); 
         model.setUri(Uri.fromFile(new File(path))); 
         list.add(model); 
        } 
        gridPhotos.setAdapter(new PhotoFragmentAdapter(getActivity(), list)); 
        Toast.makeText(getActivity(), "Total : " + String.valueOf(list.size()), Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 

       } 
      } 
    } 
} 

PhotoFragmentAdapter.java

public class PhotoFragmentAdapter extends BaseAdapter { 

private Context context; 
private ArrayList<PhotoFragmentModel> arrayList; 
private LayoutInflater inflater; 
private ImageView ivPhoto; 
private TextView tvName; 

public PhotoFragmentAdapter(Context context, ArrayList<PhotoFragmentModel> arrayList) { 
    this.context = context; 
    this.arrayList = arrayList; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return arrayList.size(); 
} 

@Override 
public Object getItem(int i) { 
    return arrayList.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    view = inflater.inflate(R.layout.item_photo_fragment, null); 
    final PhotoFragmentModel model = (PhotoFragmentModel) this.getItem(i); 

    ivPhoto = (ImageView) view.findViewById(R.id.iv_item_photo); 
    tvName = (TextView) view.findViewById(R.id.tv_item_name); 

    Picasso.with(context).load(model.getUri()).fit().into(ivPhoto); 
    tvName.setText(model.getName()); 
    return view; 
} 

}

选择是可以正常使用,但选择后的图像不会在GridView的显示。这是主要问题。如果任何人都可以帮助我或指导我一些其他图书馆,我会感谢他。

+0

检查的数组列表项如果你的arrayList不是null并且arrayList.size()必须大于0 k如果添加到列表的文件路径是有效的,并且映像存在于文件系统中。 –

+0

我已经检查过它。它工作正常。 –

回答

0
model.setUri(Uri.fromFile(new File(path))); 

这个不能解决的情况:文件夹的特殊字符。

试试这个

model.setUri(Uri.fromFile(new File(getPath(uri))); 

public String getPath(Uri uri) 
    { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
     if (cursor == null) return null; 
     int column_index =    cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     String s=cursor.getString(column_index); 
     cursor.close(); 
     return s; 
    } 

哦,现在我得到它的主要原因不是工作的是

final PhotoFragmentModel model = (PhotoFragmentModel) this.getItem(i); 

可以直接调用指数

Picasso.with(context).load(arrayList.get(i).getUri()).fit().into(ivPhoto); 
+0

它没有发挥任何作用。问题依然存在。 –

+0

现在尝试它会工作。 –

+0

谢谢你帮助我。 –

相关问题