0

我有一个列表片段,它附加了一个适配器,如下所示。在 getView 中,imageLoader 会将图像加载到该视图,并且时间和加载工作正常,没有问题,但我不确定为它设置布局高度的最佳方法是什么,因为我知道我是否从一个 imageLoader 它与调用上的 getview 不一致。所以我不确定,如何确保视图被刷新和更新,以及我如何知道接收到的图像的高度?

代码:TestCustomArrayAdapter

package com.adapters;

public class TestCustomArrayAdapter extends ArrayAdapter<TestItemModel> {

    /** Instance Variables **/

    // private Instances
    private final LayoutInflater _inflater;
    public OnItemClickListener _ol;
    public ImageLoader _imageLoader;

    public TestCustomArrayAdapter(Context context) {

        super(context, R.layout.test_list_fragment);

        // Set-up inflater
        _inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // Set-up up Image Loader
        _imageLoader = new ImageLoader(context);

    }

    // Set List Data
    public void setData(List<TestItemModel> data) {
        clear();
        if (data != null) {
            for (TestItemModel appEntry : data) {
                add(appEntry);
            }
        }
    }

    /**
     * Populate new items in the list.
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // create viewHolder
        View view;

        // Check Views
        if (convertView == null) {
            view = _inflater.inflate(R.layout.test_single_item, parent, false);
        } else {
            view = convertView;
        }

        // Create Items
        TestItemModel item = getItem(position);

        TextView itemLabel = (TextView) view.findViewById(R.id.text_view_label);
        TextView itemId = (TextView) view
                .findViewById(R.id.text_view_description);

        // Create ImageViews
        ImageView image = (ImageView) view.findViewById(R.id.image_id);

        // Create Buttons
        Button btn1 = (Button) view.findViewById(R.id.button_id_1);
        Button btn2 = (Button) view.findViewById(R.id.button_id_2);
        Button btn3 = (Button) view.findViewById(R.id.button_id_3);

        // Create Resources
        Resources resources = this.getContext().getResources();

        // Create Listeners
        _ol = new OnItemClickListener(position, item);

        // Setup TextViews
        itemLabel.setText(item.getName().toString());
        itemId.setText(item.getName().toString());

        // Setup Images
        _imageLoader.DisplayImage(item.getBm(), image);
        // TODO set image size based on the value of the image here
        // image.getLayoutParams().height = 100;

        // Setup Buttons
        btn1.setOnClickListener(_ol);
        btn1.setTag(1);
        btn2.setOnClickListener(_ol);
        btn2.setTag(2);
        btn3.setOnClickListener(_ol);
        btn3.setTag(3);

        return view;
    }

    private class OnItemClickListener implements OnClickListener {
        private int _position;
        private TestItemModel _testItem;

        public OnItemClickListener(int position, TestItemModel ti) {
            _position = position;
            _testItem = ti;
        }

        // TODO
        // provide functionality for which button was clicked then pass the item
        // to which it was clicked in.
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.button_id_1:
                // btn1 clicked
                Toast.makeText(getContext(),
                        " Button1 clicked at positon" + v.getTag(),
                        Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_id_2:
                // btn2 clicked
                Toast.makeText(getContext(),
                        " Button2 clicked at positon" + v.getTag(),
                        Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_id_3:
                Toast.makeText(getContext(),
                        " Button3 clicked at positon" + v.getTag(),
                        Toast.LENGTH_SHORT).show();
                // btn 3 clciked
                break;
            }

            // the view is the button, so you get get the tag it has set with
            // v.getTag() to know what button is pressed.
            Log.v("YOOO",
                    "Button Click at position " + _position + " " + v.getTag()
                            + " Item ID = " + _testItem.getId());

        }
    }

}
4

2 回答 2

1

您可以尝试从 ImageLoader 获取位图,然后使用 getWith 和 getHeight 获取大小

您还可以使用以下代码设置 imageView 的最大大小:

imageView.setMaxHeight(myMaxHeight);
imageView.setMaxWidth(myMaxWidth);
imageView.setAdjustViewBounds(true);
imageView.setScaleType(ScaleType.FIT_CENTER);
于 2013-11-11T19:05:11.807 回答
0

为了回答我的问题,我将 ImageView 布局中的所有内容都更改为高度和宽度以填充父级,并且图像大小已正确加载,这意味着我可以通过编程方式为遇到的任何人自行设置最小高度和宽度同样的问题。

布局中的 IMAGEVIEW 片段:

<ImageView
        android:id="@+id/image_id"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:contentDescription="Image Is Here"
        android:src="@drawable/ic_save"
        android:text="Sample Image"
        android:textSize="20sp" />
于 2013-11-14T04:57:19.317 回答