Я не вижу свой виджет Галерея, никакие изображения не отображаются - PullRequest
0 голосов
/ 05 сентября 2011

Я внедряю базу данных, где каждый элемент (завод) имеет галерею изображений. Для каждого растения в базе данных я создаю папку для хранения изображения.

Когда я просматриваю элемент, я хочу, чтобы его детали отображались вместе с галереей изображений, однако раздел, где должна быть галерея, пуст

Я не уверен, виноват ли мой 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;
        }
    }
}

Извините, что так долго, но, надеюсь, я включил достаточно. Галерея была в основном основана на примере галереи, но настроена так, чтобы соответствовать моему коду. Если у кого-то есть идея, почему изображения не отображаются, я был бы признателен за помощь!

Спасибо!

1 Ответ

1 голос
/ 05 сентября 2011

По умолчанию ориентация LinearLayout является горизонтальной:)

(Изменить: что я имею в виду, проверьте, что это не соответствует RHS вашей деятельности)

...