使用LinearLayout将自定义视图添加到ListView以编程方式Android

时间:2013-11-15 00:10:01

标签: android android-listview android-fragments android-linearlayout

我相信我有这个问题,因为缺乏睡眠和缺乏经验的安装。

我有一个带有两个片段的应用。左边的片段(我关注的那个)声明如下:

public class CollageLibraryFragment extends ListFragment implements ListAdapter

我希望它能够保存一个自定义视图列表,其中包含图像的缩略图,有关该图像的一些数据以及垂直LinearLayout中的按钮。

我已经能够成功显示一个只有ImageViews的列表,但我的自定义ViewGroup包含图像和一个按钮(数据将在我显示后出现)不会出现在列表中。

我的猜测是我需要在我的自定义ViewGroup中实现onDraw或onLayout,但我不知道该怎么做,而且我已经尴尬地乱搞了4个多小时。

以下是一些相关代码:

在CollageLibraryFragment中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    _pictureCollageDataModel = PictureCollageDataModel.getInstance();
    _images = _pictureCollageDataModel.getCollageImages();
    if(_listView == null)
        _listView = new ListView(getActivity());

    _listView.setAdapter(this);
}
....
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    ThumbnailView thumbnailView = new ThumbnailView(getActivity(), _images.get(i));
    //ImageView imageView = new ImageView(getActivity());
    //imageView.setImageBitmap(_images.get(i)._image.getBitMap());
    return thumbnailView;
}
....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    //link to list view
    return _listView;
}

注意getView方法中注释掉的ImageView。这确实出现在我的列表片段中,如预期的那样。但是,当我切换到ThumbnailView时,它不显示。

我的整个缩略图视图:

public class ThumbnailView extends ViewGroup
{
    Bitmap _thumbnail;
    LinearLayout _mainViewGroup = null;
    public ThumbnailView(Context context, CollageImage image)
    {
        super(context);
        _thumbnail = image._image.getBitMap();
        _mainViewGroup = new LinearLayout(context);
        _mainViewGroup.setBackgroundColor(Color.RED);
        _mainViewGroup.setOrientation(LinearLayout.VERTICAL);
        ImageView thumbView = new ImageView(context);
        thumbView.setImageBitmap(_thumbnail);

        _mainViewGroup.addView(thumbView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        Button addButton = new Button(context);
        addButton.setText("+");
        _mainViewGroup.addView(addButton);
        this.addView(_mainViewGroup);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        _mainViewGroup.setMinimumWidth(100);
        _mainViewGroup.setMinimumHeight(100);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

    }
}

现在我觉得我只是茫然地看着这个,我确信我只是没有正确地定义事物或者用正确的方法将它们放在一边,但我只是出于某种原因而撞墙了我只需要朝着正确的方向微调一点,我想我可以继续。

任何帮助都将是非常光荣的。

谢谢!

1 个答案:

答案 0 :(得分:0)

实际上并不太难。我从扩展ViewGroup扩展到扩展LinearLayout,摆脱了我的onLayout方法,只是添加了视图。以下是我最终用于ThumbnailView的内容。

public class ThumbnailView extends LinearLayout
{
    Bitmap _thumbnail;
    //LinearLayout _mainViewGroup = null;
    public ThumbnailView(Context context, CollageImage image)
    {
        super(context);
        _thumbnail = image._image.getBitMap();

        ImageView thumbView = new ImageView(context);
        thumbView.setImageBitmap(_thumbnail);

        Button addButton = new Button(context);
        addButton.setText("+");

        this.setOrientation(LinearLayout.VERTICAL);
        this.addView(thumbView);
        this.addView(addButton);
    }
}