getView里面的getView只显示最后插入的视图

时间:2014-11-10 05:52:57

标签: android listview

我需要在getView方法中生成一些ImageView。

我会在这个布局中生成它们:

    <LinearLayout
        android:id="@+id/layoutBaby"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:orientation="horizontal" >

因此图像将水平添加自动(因为orientation)。

这是我添加这些图片的方式:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    for(int childId : dbHelper.getChildrenIdBySchedule(getItem(position).getId()))
    {
        ImageView imgBaby = new ImageView(context);
        imgBaby.setLayoutParams(params);

        String image = dbHelper.getChildImage(childId);
        File imgFile = new File(image);

        if(imgFile.exists())
        {
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            imgBaby.setImageBitmap(myBitmap);
        }
        else
        {
            imgBaby.setImageResource(R.drawable.ic_launcher);
        }
        holder.layoutBaby.addView(imgBaby);
    }

我调试了上面的代码,以确保多次调用它(基于dbHelper.getChildrenIdBySchedule)。

如果只有1 ImageView,则此代码有效,但如果有{1}}以上,则只有最新添加ImageView是可以保留的。

例如,如果theres 2 ImageView,虽然它们都已添加(我调试代码),但只有第二个ImageViews可见。

随时问我什么,谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

您可以使用HorizontalScrollView

进行管理
public View getView(int position, View view, ViewGroup viewgroup) {
        ViewHolder holder = new ViewHolder(); // our view holder of the row
        if (view == null) {

            HorizontalScrollView hr = new HorizontalScrollView(con);
            LinearLayout layout = new LinearLayout(con);
            layout.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));



           for(int childId : dbHelper.getChildrenIdBySchedule(getItem(position).getId()))
                holder.image = new ImageView(con);
                layout.addView(holder.image);
                String image = dbHelper.getChildImage(childId);
                File imgFile = new File(image);

               if(imgFile.exists())
               {
                    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                    holder.image.setImageBitmap(myBitmap);
               }
               else
                    holder.image.setImageResource(R.drawable.ic_launcher);
            }
            hr.addView(layout);
            view = hr;

            view.setTag(holder);

        }
        holder = (ViewHolder) view.getTag();

        return view;

    }

For more info, refer this