-1

在我的应用程序中,我从MySQL服务器数据库中获取所有图像和名称到 Android 手机。如果模拟器屏幕是HVGA,则只显示五个图像和名称。在LogCat中也只有五个名字被打印出来。当我滚动屏幕时,我可以在屏幕上看到多少个名字,只有打印出多少个名字。取而代之的是,所有名称都必须在滚动之前打印出来。

public class VegdishesListview extends BaseAdapter {
    String qrimage;
    Bitmap bmp, resizedbitmap;
    Bitmap[] bmps;
    Activity activity = null;
    private LayoutInflater inflater;

    private ImageView[] mImages;
    String[] itemimage;
    TextView[] tv;
    String itemname,price,desc;
    String[] itemnames;
    String[] prices;
    String[] descs;
    HashMap<String, String> map = new HashMap<String, String>();

    public VegdishesListview(Context context, JSONArray imageArrayJson) {
        //inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //  imageLoader = new ImageLoader(activity);
        inflater = LayoutInflater.from(context);
        this.mImages = new ImageView[imageArrayJson.length()];
        this.bmps = new Bitmap[imageArrayJson.length()];
        this.itemnames = new String[imageArrayJson.length()];
        this.prices = new String[imageArrayJson.length()];
        this.descs = new String[imageArrayJson.length()];
        try {
            for (int i = 0; i < imageArrayJson.length(); i++) {
                JSONObject image = imageArrayJson.getJSONObject(i);
                qrimage = image.getString("itemimage");
                itemname = image.getString("itemname");
                price = image.getString("price");
                desc = image.getString("itemdesc");

                itemnames[i] = itemname;
                prices[i] = price;
                descs[i] = desc;

                byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

                bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                                                    qrimageBytes.length);
                int width = 100;
                int height = 100;
                resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                                                          true);
                bmps[i] = bmp;

                mImages[i] = new ImageView(context);
                mImages[i].setImageBitmap(resizedbitmap);

                mImages[i].setScaleType(ImageView.ScaleType.FIT_START);

                // tv[i].setText(itemname);
            }
            System.out.println(map);
        }
        catch (Exception e) {
            // TODO: handle exception
        }
    }

    public int getCount() {
        return mImages.length;
    }

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

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

    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;

        vi = inflater.inflate(R.layout.vegdisheslistview, null);

        TextView text = (TextView)vi.findViewById(R.id.vegdishestext);
        ImageView image = (ImageView)vi.findViewById(R.id.vegdishesimage);
        TextView text1 = (TextView)vi.findViewById(R.id.vegdishesprice);
        TextView text2 = (TextView)vi.findViewById(R.id.vegdishesdesc);
        image.setImageBitmap(bmps[position]);
        text.setText(itemnames[position]);
        text1.setText(prices[position]);
        text2.setText(descs[position]);
        System.out.println(itemnames[position]);

        return vi;
    }

这是我的自定义列表视图 XML 布局。如何根据需要更改我的代码?

4

2 回答 2

0

这是默认的 ListView 操作,在 Android ListView 中它会回收视图。换句话说,它只考虑一次可以在屏幕上放置的项目数量,因此在您的情况下,您只能在屏幕上看到这五个元素,因此...

有关更多信息,请参阅Android 文档中的AdapterView

于 2012-04-21T07:49:36.580 回答
0

创建列表视图是为了显示大数据列表,但效率与移动设备资源相关。

它重用视图以提高效率。

您提供给列表的适配器中必须有一个 getView 方法。这为列表视图的每个位置提供了独立的视图。

并且仅对屏幕可见的视图调用它。我确定您在 getView 中记录了该名称。

当您滚动时,将再次调用 getView 方法以将所有视图绘制到屏幕上。

如果您希望一次打印所有数据,请在设置适配器之前执行此操作。但这不明智。实际上只加载那些需要显示的内容。

于 2012-04-21T07:50:51.847 回答