ListActivity,使用Bitmap自定义行布局,未正确填充

时间:2011-12-17 23:33:27

标签: android bitmap listactivity sd-card

这是我的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;
        }
       });

我试图从记忆中做到这一点,我将在以后回家并编辑任何错误 - 但这应该是它的主旨。

当我运行它时,没有任何反应,好像我没有指定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;
        }
       });

FOR 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>

0 个答案:

没有答案