Search code examples
androidandroid-viewandroid-listfragment

Image Height Control


I have a List Fragment which has an adapter attached to it as it is shown below. Within getView, the imageLoader will load the images to that view, and the timing and loading works fine,no issues there, but i am not sure what the best way to set the layout height for it, because i know if i set it from an imageLoader it isn't consistent with the getview on the calls. so I am not sure, How to make sure that the view is refreshed and updated, and how i can know the height of the image received?

CODE: 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());

        }
    }

}

Solution

  • To answer my problem, I changed everything within the layout for ImageView to height and width to fill parent, and the image sizing loaded proper to that, which means programmatically I can set minimum heights and widths on my own, for anyone who comes across the same problem.

    SNIPPET OF IMAGEVIEW IN LAYOUT:

    <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" />