0

リストビュー形式で名前付きの画像のリストを表示するアクティビティを開発したいと思います。私は BaseAdapter を使用してコード カスタム アダプターを持っています。エミュレーターで実行している間、常にデバッガー ウィンドウが表示され、エミュレーターには何も表示されません。

指定したフォルダの下に画像 (11) 枚の画像があり、ユーザー権限 WRITE_EXTERNAL_STORAGE が与えられています。

以下はコードです。(ImageViewer.java)

package com.example.imageviewer;

import java.io.File;
import java.io.FileFilter;
import java.sql.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.zip.Inflater;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.audiofx.EnvironmentalReverb;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class ImageViewer extends Activity {

    File oDirectory;
    ListView oLVImages ;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_viewer);

        try
        {
            oLVImages = (ListView) findViewById(R.id.lvImages);

            String strPath = Environment.getExternalStorageDirectory().getPath() + File.separator + Environment.DIRECTORY_PICTURES;

            oDirectory = new File(strPath);
            Log.d("ImageViewer", strPath);


            populateImages (oDirectory);
        }
        catch(Exception e){
            Log.d("ImageViewer", "1 " + e.getMessage());
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_image_viewer, menu);
        return true;
    }


    public void populateImages (File oDirectory){
        try{
            File[] oFiles = oDirectory.listFiles();

            ArrayList<Image> oImages = new ArrayList<ImageViewer.Image>();

            for (int i = 0 ; i < oFiles.length;i++){
                if (oFiles[i].isFile())
                {
                    Image x = new Image();
                    x.imgPath = oFiles[i].getPath().toString();
                    x.imgName = oFiles[i].getName().toString();
                    oImages.add(x);
                }
            }

            ImageListAdapter oImageListAdapter = new ImageListAdapter(getApplicationContext(), oImages);

            oLVImages.setAdapter(oImageListAdapter);

        }
        catch (Exception e){
            Log.d("ImageViewer", e.getMessage());
        }
    }

    class Image{
        private String imgName ;
        private String imgPath;

        public Image(){
            super();
            imgName = "";
            imgPath = "";
        }

        public Image (String imgName, String imgPath){
            super();
            this.imgName = imgName;
            this.imgPath = imgPath;
        }

    }

    public class ImageListAdapter extends BaseAdapter{

        ArrayList<Image> imgImageList;
        Context oContext;

        public ImageListAdapter(Context oContext, ArrayList<Image> oImage){
            this.imgImageList = oImage;
            this.oContext = oContext;
        }
        public int getCount() {
            // TODO Auto-generated method stub
            return imgImageList.size();
        }

        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return this.imgImageList.get(arg0);
        }

        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            //super.getView(arg0, arg1, arg2);
            View oView = arg1;
            LayoutInflater inflater =  getLayoutInflater();
            oView = inflater.inflate(R.layout.imagedetail, null);
            ImageView iv = (ImageView) findViewById(R.id.ivimage);
            TextView tv = (TextView) findViewById(R.id.tvimage);
            Image oIM = imgImageList.get(arg0);
            Bitmap oBM = BitmapFactory.decodeFile(oIM.imgPath);
            iv.setImageBitmap(oBM);
            tv.setText(oIM.imgName.toString());

            return oView;
        }

    }


}

string.xml ファイル:

<resources>

    <string name="app_name">ImageViewer</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_image_viewer">Image Viewer</string>

    <string name="ivimage"></string>
    <string name="tvheader">Photos</string>

</resources>

activity_image_viewer.xml ファイル:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:id="@+id/tvheader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFFFF"
        android:padding="10dp"
        android:text="@string/tvheader"
        android:textSize="22dp"
        android:background="#FF336699"
        />
    <ListView 
        android:id="@+id/lvImages"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </ListView>

</LinearLayout>

imagedetail.xml (ListViewの各項目のレイアウトファイル)

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:stretchColumns="1"
      android:padding="10dp"
      android:id="@+id/tbllayout" >
      <TableRow
          android:id="@+id/tblrow"
          android:layout_width="match_parent"
          android:layout_height="wrap_content">
        <ImageView 
            android:id="@+id/ivimage"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:padding="10dp"
            android:contentDescription="@string/ivimage"
            />

        <TextView 
            android:id="@+id/tvimage"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            />
    </TableRow>
</TableLayout>
4

1 に答える 1

0

カスタムアダプタでこのコードを使用してください

getview メソッド

 public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            //super.getView(arg0, arg1, arg2);
            View oView = arg1;
            LayoutInflater inflater =  getLayoutInflater();
            oView = inflater.inflate(R.layout.imagedetail, null);
            ImageView iv = (ImageView)oView.findViewById(R.id.ivimage);
            TextView tv = (TextView)oView.findViewById(R.id.tvimage);
            Image oIM = imgImageList.get(arg0);
            Bitmap oBM = BitmapFactory.decodeFile(oIM.imgPath);
            iv.setImageBitmap(oBM);
            tv.setText(oIM.imgName.toString());

            return oView;
        }

レイアウトはウィジェットを使用して膨張させ、

ImageView iv = (ImageView)oView.findViewById(R.id.ivimage);

TextView tv = (TextView)oView.findViewById(R.id.tvimage);

于 2012-09-12T10:13:29.330 に答える