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

그러나 문제가 있습니다. 비트 맵 형식의 사진이 목록보기에 추가되지 않습니다. 그냥 빈 공백으로 나타납니다. 내가 여기서 뭔가 잘못하고있는거야? 둘째, 사용자가 사진을 찍지 않기로 결정하면 이미지보기가 표시되지 않아야합니다. 이 방법을 구현하는 방법을 잘 모르겠습니다. 사용자 지정 목록 어댑터를 만들어야합니까? 당신의 도움이

+0

어쩌면 사진의 크기에 문제가있는 것입니다, 당신은 아마 썸네일로 사진을 변환하려고합니다. –

+0

방금 ​​내 이미지에서 썸네일을 만들고 추가하고 여전히 표시하지 않으려 고 시도했습니다. – Splitusa

+0

sdcard에서 사진에 액세스 할 때 /sdcard/가 아니라 this.getExternalStorageDirectory() + pathToImage를 사용하여 액세스해야합니다. 또한 manifest.xml에서 외부 저장소에 대한 읽기/쓰기 액세스 권한이 있는지 확인하고 일부 오류 코드 또는 일부 logcat을 제공 할 수있는 경우 여기에서 관련이있을 수 있습니다. 사용하는 프로세스가 맞습니다.하지만 지금 당장은 코드를 테스트 할 수 없습니다. –

답변

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를 반환하면 자체 바인딩을 시도합니다.


URL을 SD 카드 위치를 가리키는 문자열로 맵핑 해보십시오. 그러나 SimpleAdapter가이를 처리 할 수 ​​있는지는 잘 모르겠습니다.


은 또한이 게시물을 참조 : Dynamically show images from resource/drawable

+0

답변을 주셔서 감사합니다. 이것은 정말로 흥미 롭습니다. 나는 이것을 지금 실행하고 나의 관찰에 응답하려고 노력할 것이다. – Splitusa

+0

이것은 확실히 트릭을 만들었습니다. 많은 감사합니다! – Splitusa

관련 문제