2017-10-10 8 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の項目を呼び出すことができます

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

で取得してくださいarrayListがnullでなく、arrayList.size()が0より大きい必要がある場合。また、checもしあなたがリストに追加しているファイルパスが有効で、ファイルシステムにイメージが存在するならば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; 
    } 

ああ、今私はそれが動作していないの主な理由は、あなたが直接インデックス

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

その効果はありません。問題は同じままです。 –

+0

今すぐ試してみてください。 –

+0

私を助けていただきありがとうございます。 –

関連する問題