私はSDカードからフォルダを選択しようとしており、このフォルダ内に画像のリストを表示しようとしています。新しいフォルダピッカーAPIを使用してSDカードからListViewに画像を表示するにはどうすればよいですか?
Android 5.0、 までは問題なく動作していたので、新しいSDカードアクセスAPIでフォルダを選択して更新しました。
public void FolderSelectionAlertDialog_Lollipop() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 556);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if(resultCode == RESULT_OK) {
// Get Uri from Storage Access Framework.
Uri_Lollipop = resultData.getData();
// Persist access permissions.
this.getContentResolver().takePersistableUriPermission(Uri_Lollipop,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
何らかの理由で、ListViewに画像が表示されません。誰かがこの上で私を導いてくださいすることができ
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.listview_layout, parent, false);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.ListViewImage);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder)convertView.getTag();
}
Picasso.with(mContext)
.load(getItem(position).getImageUrl())
.fit()
.centerCrop()
.into(viewHolder.imageView);
}
class ViewHolder {
RelativeLayout layout;
ImageView imageView;
}
:
public void ListView_Load_Lollipop() {
DocumentFile documentFile = DocumentFile.fromTreeUri(this, Uri_Lollipop);
Locale defaultLocale = Locale.getDefault();
for(DocumentFile file : documentFile.listFiles()) {
String FileName = file.getName();
if(FileName.toLowerCase(defaultLocale).endsWith(".jpg") ||
FileName.toLowerCase(defaultLocale).endsWith(".png") ||
FileName.toLowerCase(defaultLocale).endsWith(".jpeg")) {
mListViewObject = new ListViewObject();
mListViewObject.setName(FileName);
Uri uri = file.getUri();
String imagePath = uri.getPath();
mListViewObject.setImageUrl("file:///" + imagePath);
ListViewObject_List.add(mListViewObject);
}
}
}
アダプタ:ここ
は、コードのですか?
どうもありがとう
更新:4-28-16
私は@ CommonsWareの答えに、この
listViewAdapter = new ListViewAdapter(this, ListViewObject_List);
listView.setAdapter(listViewAdapter);
public void ListView_Load_Lollipop() {
DocumentFile documentFile = DocumentFile.fromTreeUri(this, Uri_Lollipop);
Locale defaultLocale = Locale.getDefault();
for(DocumentFile file : documentFile.listFiles()) {
String FileName = file.getName();
if(FileName.toLowerCase(defaultLocale).endsWith(".jpg") ||
FileName.toLowerCase(defaultLocale).endsWith(".png") ||
FileName.toLowerCase(defaultLocale).endsWith(".jpeg")) {
mListViewObject = new ListViewObject();
mListViewObject.setName(FileName);
Uri uri = file.getUri();
String imagePath = uri.getPath();
mListViewObject.setImageUrl("file:///" + imagePath);
ListViewObject_List.add(mListViewObject);
}
}
}
に感謝を追加するのを忘れ:私は画像を渡すことで私の問題を解決することができました
イメージパスの代わりに、Uriをオブジェクトクラスに直接割り当てます。
今後誰かに役立つことを願っています。
感謝 - :ここではあなたのイメージの実際のパスを返しますヘルパークラスであります答えのために。私は直接オブジェクトクラスにURIを送信しようとしましたが、イメージはまだListViewに表示されません。画像は元のコードでImageViewに表示されます。何とかListViewに問題があります。 – Dante
@ダンテ:未修正の「ウリ」があなたがピカソに渡しているものであることを確認してください。 – CommonsWare
OMG、それは動作します!これを追加するのを忘れました\t listViewAdapter = new ListViewAdapter(this、ListViewObject_List); \t listView.setAdapter(listViewAdapter);そのため、アダプターは機能しませんでした。 uriをObjectクラスに直接渡した後、それが動作します。とにかくありがとうございます – Dante