0

我相信我遇到这个问题是因为睡眠不足和对 android 缺乏经验的结合。

我有一个包含两个片段的应用程序。左边的片段(我关心的那个)是这样声明的:

public class CollageLibraryFragment extends ListFragment implements ListAdapter

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

我已经能够成功地显示一个仅包含 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) {

    }
}

现在我觉得我只是在茫然地看着这个,我确定我只是没有正确定义事物或将它们放在正确的方法中,但由于某种原因我只是碰壁了,我只需要我认为朝着正确的方向轻推一点,这样我就可以继续了。

任何帮助都将是极其光荣的。

谢谢!

4

1 回答 1

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);
    }
}
于 2013-11-15T20:06:41.757 回答