2

私は現在、2行のテキストを保持する単純なリストビューアダプタを持っています。次にやろうとしているのは、ユーザーが撮った写真をリストビューに表示するオプションを追加することです。リストアダプタを次のように変更しました。

standardAdapter = new SimpleAdapter(this, list, R.layout.post_layout,
                new String[] { "time", "post", "image"}, new int[] {
                        R.id.postTimeTextView, R.id.postTextView, R.id.post_imageView});

次に、通常どおりハッシュマップに追加し、アダプターを更新します。

// create a new hash map with the text from the post
        feedPostMap = new HashMap<String, Object>();
        feedPostMap.put("time", currentTimePost);
        feedPostMap.put("post", post);
        if(photoWasTaken == 1){
            feedPostMap.put("image", pictureTaken);
        }
        //add map to list
        list.add(feedPostMap);

        // refresh the adapter
        standardAdapter.notifyDataSetChanged();

最後に、結果のアクティビティのコードは次のとおりです。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "ON activity for result- CAMERA");
        if (resultCode == Activity.RESULT_OK) {
            //get and decode the file
            pictureTaken = BitmapFactory.decodeFile("/sdcard/livefeedrTemp.png");

            //Display picture above the text box
            imageViewShowPictureTaken.setImageBitmap(pictureTaken);
            displayPhotoLayout.setVisibility(LinearLayout.VISIBLE);

            //NEW - make photo variable = 1
            photoWasTaken = 1;
        }
    }

しかし、私は問題にぶつかっています。ビットマップ形式の写真は、リストビューに追加されていません。空の空白として表示されます。私はここで何か間違ったことをしていますか?次に、ユーザーが写真を撮らないことにした場合は、画像ビューを表示しないでください。これを実装する方法がわかりません。カスタムリストアダプタを作成する必要がありますか?

ご協力いただきありがとうございます

4

1 に答える 1

2

問題は、SimpleAdapterがデフォルトでビットマップをサポートしていないことです。

デフォルトでは、値は画像リソースとして扱われます。値が画像リソースとして使用できない場合、値は画像URIとして使用されます。

ただし、解決策はあります。カスタムViewBinderを設定し、自分でバインディングを作成できます。

class MyViewBinder implements SimpleAdapter.ViewBinder {
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if (view instanceof ImageView && data instanceof Bitmap) {
            ImageView v = (ImageView)view;
            v.setImageBitmap((Bitmap)data);
            // return true to signal that bind was successful
            return true;
        }
        return false;
    }
}

そして、これをSimpleAdapterに設定します。

adapter.setViewBinder(new MyViewBinder());

このように、SimpleAdapterが値をビューにバインドしようとするたびに、最初にビューバインダーのsetViewValueメソッドを呼び出します。falseが返された場合、それ自体をバインドしようとします。


また、SDカードの場所を指す文字列としてURLをマップに挿入することもできます。ただし、SimpleAdapterがこれを処理できるかどうかはわかりません。


この投稿も参照してください: リソース/ドローアブルからの画像を動的に表示する

于 2011-12-30T18:32:02.323 に答える