2

私は現在、2行のテキストを保持する単純なリストビューアダプターを持っています。私が次にしようとしているのは、ユーザーがリストビューで撮影した写真を表示するオプションを追加することです。その後、私はいつものようにハッシュマップに追加し、アダプタをリフレッシュAndroid - ユーザーが撮影した写真をリストビューに追加する

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; 
     } 
    } 

ただし、問題が発生しています。ビットマップ形式の写真がリストビューに追加されていません。空白の空白として表示されます。私はここで何か間違っていますか?第2に、ユーザが写真を撮らないことを決定した場合、画像ビューは表示されるべきではない。私はどのようにこれを実装するか分からない。カスタムリストアダプタを作成する必要がありますか?あなたの助け

+0

はたぶん、絵の大きさに問題があり、あなたは多分、サムネイルに画像を変換しようとしなければなりません。 –

+0

画像からサムネイルを作成して追加してもまだ表示されない – Splitusa

+0

sdcardで画像にアクセスするときは、this.getExternalStorageDirectory()+ pathToImageを使用してアクセスし、/ sdcard /では直接アクセスしないでください。 また、マニフェストファイルの外部ストレージに読み書き可能なアクセス権があることを確認する必要があります。エラーコードやログキャストを提供できる場合は、ここで関連性があります実際はコードをテストすることはできません。 –

答えて

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方法をcallesビューに値をバインドしようとするたびに。 falseを返すと、それ自身をバインドしようとします。


また、sdカードの場所を示す文字列としてURLをマップに挿入することもできます。しかし、私はSimpleAdapterがこれを処理できることは確かではありません。


はまた、この記事を参照してください。 Dynamically show images from resource/drawable

+0

あなたの答えに感謝bbalazs!これは本当に面白いです。私は今これを実装しようとし、私の観察で応答します。 – Splitusa

+0

これは間違いなくトリックでした。どうもありがとうございます! – Splitusa

関連する問題