I cannot see my Gallery widget, no pictures are shown
I am implementing a database where each item (plant) has a gallery of images. For each plant in the database I create a folder to store the image.
When I view an item I want its details to be displayed along with the gallery of images however the section where the gallery should be is blank.
I am not sure if my xml or code is to blame so here is the 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>
...and the code...
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;
            fil开发者_开发问答eList = 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;
        }
    }
}
Sorry it is so long but hopefully I have included enough. The gallery was mostly based on the Gallery example but tweaked to match my code. If anyone has any idea why the images are not displayed I would appreciate the help!
Thank you!
Default LinearLayout orientation is horizontal :)
(Edit:What I mean is, check that it isn't off the RHS of your activity)
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论