我相信我遇到这个问题是因为睡眠不足和对 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) {
}
}
现在我觉得我只是在茫然地看着这个,我确定我只是没有正确定义事物或将它们放在正确的方法中,但由于某种原因我只是碰壁了,我只需要我认为朝着正确的方向轻推一点,这样我就可以继续了。
任何帮助都将是极其光荣的。
谢谢!