リストビュー形式で名前付きの画像のリストを表示するアクティビティを開発したいと思います。私は 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>