2017-10-10 45 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

謝謝你幫助我。 –

相關問題