0

睡眠不足とアンドロイドの経験不足の組み合わせが原因で、この問題が発生していると思います。

2 つのフラグメントを持つアプリがあります。左側のフラグメント (私が関心を持っているもの) は、次のように宣言されています。

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) {

    }
}

今、私はこれをぼんやりと見ているような気がします.物事を適切に定義したり、適切な方法で配置したりしていないだけだと確信していますが、何らかの理由で壁にぶつかっただけで、正しい方向に少し微調整して、続行できると思います。

どんな助けも非常に輝かしいものになるでしょう。

ありがとう!

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 に答える