Вот фрагмент кода моей ListActivity с адаптером, который пытается
a) получить список путей к файлам всех файлов в определенном каталоге SD-карты
b)factory.decode эти файлы в растровые изображения и добавить их в пользовательскую строку в listActivity
File directory = new File("/sdcard/DirectoryOfStuff");
String[] filePaths= directory.list;
ArrayAdapter<Bitmap> pics = new ArrayAdapter<Bitmap>();
for(int i = 0; i<filePaths.length; i++){
Bitmap b = BitmapFactory.decodeFile(filePaths[i]);
pics.add(b); }
setListAdapter(new ArrayAdapter<Bitmap>(this, R.layout.custom_row, pics) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (null == convertView) {
row = mInflater.inflate(R.layout.custom_row, null);
} else {
row = convertView;
}
ImageView iv = (ImageView) row.findViewById(R.id.imageView_row);
iv.setImageBitmap(getItem(position));
return row;
}
});
Я попытался сделать это из памяти, я пойду домой позже и отредактирую любые ошибки, но это должно быть jistоб этом.
, когда я запускаю это, ничего не происходит, как будто я не указал setContentView (R.layout.main), который у меня есть.В main.xml содержится ListView.
РЕШЕНО ОДНО ИЗ ВОПРОСОВ:
//this directory path needs to pre-fix the filepath when trying to 'decode' via BitmapFactory, oops
String DIRECTORY_PATH = "/sdcard/folder_name/"
for(int i = 0; i<filePaths.length; i++){
Bitmap b = BitmapFactory.decodeFile(DIRECTORY_PATH + filePaths[i]);
pics.add(b);
}
РЕШЕНЫ ВСЕ ПРОБЛЕМЫ:
layoutInflater не был создан ...
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
окончательный фрагмент рабочего кода:
ArrayList<Bitmap> pics = new ArrayList<Bitmap>();
String DIRECTORY_PATH = "/sdcard/Directory/";
File file = new File(DIRECTORY_PATH);
String[] s = file.list();
for(int i = 0; i<s.length; i++){
Bitmap b = BitmapFactory.decodeFile(DIRECTORY_PATH + s[i]);
pics.add(b);
}
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
setListAdapter(new ArrayAdapter<Bitmap>(this, R.layout.row, pics) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (null == convertView) {
row = mInflater.inflate(R.layout.row, null);
} else {
row = convertView;
}
ImageView iv = (ImageView) row.findViewById(R.id.imageView_row);
iv.setImageBitmap(getItem(position));
return row;
}
});
ДЛЯ HAVEXZ: здесь используется пользовательский макет row_row, который я использовал, хотя я добавлю еще несколько вещей в строку, когда выяснюсамый доступный / простой способ для пользователя перемещаться и обрабатывать изображения
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
также для havexz, просто включите ваше удивление, вот макет main.xml - такой же простой, как row_layout, только одно представлениев середине макета:)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/list"></ListView>
</LinearLayout>