0

我正在实现一个数据库,其中每个项目(植物)都有一个图像库。对于数据库中的每个植物,我都会创建一个文件夹来存储图像。

当我查看一个项目时,我希望它的详细信息与图像库一起显示,但是画廊应该是空白的部分。

我不确定我的 xml 或代码是否应该受到责备,所以这里是 xml...

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content">

        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:stretchColumns="*">

              ...Content Removed...

        </TableLayout>

        <Gallery xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@+id/plant_gallery"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content" />

    </LinearLayout>    
</ScrollView>

...和代码...

public class Plant extends Activity
{
    private PlantDatabase pDatabase;
    Cursor plantC;

    private boolean mExternalStorageAvailable = false;
    private boolean mExternalStorageWriteable = false;
    private String state;
    File plantDir;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.plant);

        Bundle b = getIntent().getExtras();
        String plantID = b.getString("id");

        state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state))
        {
            // We can read and write
            mExternalStorageAvailable = mExternalStorageWriteable = true;
        }
        else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
        {
            // We can only read
            mExternalStorageAvailable = true;
            mExternalStorageWriteable = false;
        }
        else
        {
            // We have no access
            mExternalStorageAvailable = mExternalStorageWriteable = false;
        }

        if (mExternalStorageAvailable)
        {
            plantDir = new File(Environment.getExternalStorageDirectory() + "/PlantLog/" + plantID);

            if (!plantDir.exists())
            {
                if (mExternalStorageWriteable)
                {   
                    if (!plantDir.mkdirs())
                    {
                        Toast.makeText(this, "Unable to make image directory for current plant", Toast.LENGTH_LONG).show();
                    }
                }
            }

            plantDir = new File(Environment.getExternalStorageDirectory() + "/PlantLog/" + plantID);

            if (plantDir.exists())
            {
                Gallery g = (Gallery)findViewById(R.id.plant_gallery);
                g.setAdapter(new ImageAdapter(this, getImageList(plantID)));

                g.setOnItemClickListener(new OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> parent, View v, 
                                            int position, long id)
                    {

                    }
                });
            }
        }

        pDatabase = new PlantDatabase(this);
        plantC = pDatabase.getPlant(plantID);

        plantC.moveToFirst();

        TextView t;

        // Display results
        t = (TextView)findViewById(R.id.plant_dbid);
        t.setText(plantC.getString(0));

        t = (TextView)findViewById(R.id.plant_plantid);
        t.setText(plantC.getString(1));

        t = (TextView)findViewById(R.id.plant_commonname);
        t.setText(plantC.getString(2));

        t = (TextView)findViewById(R.id.plant_family);
        t.setText(plantC.getString(3));

        t = (TextView)findViewById(R.id.plant_genus);
        t.setText(plantC.getString(4));

        t = (TextView)findViewById(R.id.plant_species);
        t.setText(plantC.getString(5));

        t = (TextView)findViewById(R.id.plant_variety);
        t.setText(plantC.getString(6));

        t = (TextView)findViewById(R.id.plant_form);
        t.setText(plantC.getString(7));

        t = (TextView)findViewById(R.id.plant_cultivar);
        t.setText(plantC.getString(8));

        t = (TextView)findViewById(R.id.plant_synonyms);
        t.setText(plantC.getString(9));

        t = (TextView)findViewById(R.id.plant_flowercolour);
        t.setText(plantC.getString(10));

        t = (TextView)findViewById(R.id.plant_datesown);
        t.setText(plantC.getString(11));

        t = (TextView)findViewById(R.id.plant_dateacquired);
        t.setText(plantC.getString(12));

        t = (TextView)findViewById(R.id.plant_pricepaid);
        t.setText(plantC.getString(13));

        t = (TextView)findViewById(R.id.plant_growingnotes);
        t.setText(plantC.getString(14));
    }

    private List<String> getImageList(String dir)
    {
        List<String> tFileList = new ArrayList<String>();

        File f = new File(Environment.getExternalStorageDirectory() + "/PlantLog/" + dir);      
        File[] files = f.listFiles();

        for (int i = 0; i < files.length; i++)
        {
            File file = files[i];

            // Check file is jpg image
            if (file.getPath().endsWith(".jpg"))
            {
                tFileList.add(file.getPath());
            }
        }

        return tFileList;
    }

    public class ImageAdapter extends BaseAdapter
    {
        private Context mContext;
        private List<String> fileList;
        private ImageView i;
        private int mGalleryItemBackground;

        public ImageAdapter(Context c, List<String> fList)
        {
            mContext = c;
            fileList = fList;
            i = new ImageView(mContext);

            TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
            mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
            a.recycle();
        }

        public int getCount()
        {
            return fileList.size();
        }

        public Object getItem(int position)
        {
            return position;
        }

        public long getItemId(int position)
        {
            return position;
        }

        public View getView(int position, View convertView,
                            ViewGroup parent)
        {
            System.gc();

            if (convertView == null)
            {
                try
                {
                    Bitmap bm = BitmapFactory.decodeFile(fileList.get(position).toString());

                    i.setImageBitmap(bm);
                    i.setLayoutParams(new Gallery.LayoutParams(150, 100));
                    i.setScaleType(ImageView.ScaleType.FIT_XY);
                    i.setBackgroundResource(mGalleryItemBackground);
                }
                catch (Exception e)
                {
                    // Nothing to see here
                }
            }

            return i;
        }
    }
}

抱歉,它太长了,但希望我已经包含了足够的内容。图库主要基于 Gallery 示例,但经过调整以匹配我的代码。如果有人知道为什么不显示图像,我将不胜感激!

谢谢!

4

1 回答 1

1

默认 LinearLayout 方向是水平的 :)

(编辑:我的意思是,检查它是否不在您活动的 RHS 范围内)

于 2011-09-05T12:23:35.510 回答