2012-04-07 3 views
0

두 개의 TextView와 ImageView가 포함 된 ListView를 만들고 있습니다.이미지를 포함하는 ListView에 안드로이드 전달 이미지

해시 맵을 사용하여 SimpleAdapter에 데이터를 전달하므로 이미지의 ID를 문자열로 변환 한 다음 나중에 SimpleAdapter에서 정수로 변환하여 이미지 리소스를 설정합니다.

그러나 작동하지 않는 것 같습니다.

관련 코드는 다음과 같습니다

내 로그 캣에서 내 활동

clubImages = new Integer[] { 
    R.drawable.pic1, R.drawable.pic2, 
    R.drawable.pic3, R.drawable.pic4, 
    R.drawable.pic5     
}; 

ListView lv = (ListView)findViewById(android.R.id.list); 

// create the grid item mapping 
String[] from = new String[] {"image"}; 
int[] to = new int[] {R.id.club_image}; 

// prepare the list of all records 
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
for(int i = 0; i < eventTitles.length; i++){ 
    HashMap<String, String> map = new HashMap<String, String>(); 

    map.put("image", getString(clubImages[i])); 
    fillMaps.add(map); 
} 

// fill in the grid_item layout 
SimpleAdapter adapter = new MySimpleAdapter(this, fillMaps, R.layout.eventview_row, from, to); 
lv.setAdapter(adapter); 

simpleadapter 클래스

public class MySimpleAdapter extends SimpleAdapter { 

    private List<HashMap<String, String>> results; 

    public MySimpleAdapter(Context context, List<HashMap<String, String>> data, int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     this.results = data; 
    } 

    public View getView(int position, View view, ViewGroup parent){ 

     Typeface type = Typeface.createFromAsset(getAssets(), "fonts/aircruiser.ttf"); 
     View v = view; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.eventview_row, null); 
     } 

     mClubImageImageView = (ImageView) v.findViewById(R.id.club_image);   

     int ClubImageHelper = Integer.parseInt(results.get(position).get("image").toString()); 
     mClubImageImageView.setImageResource(ClubImageHelper); 

     return v; 
    } 
} 

오류의 한 OnCreate

E/AndroidRuntime(19406): java.lang.NumberFormatException: unable to parse 'res/drawable-hdpi/pic1.png' as integer 

답변

2

당신이 할 수있는 ' ~ R.drawable.pic1String으로 전달한 다음 다시 Integer으로 구문 분석하십시오. 이 대신에 단순히 HashMap에서 직접 초기 Integer 당김 ID를 통과, 작동하지 않습니다

List<HashMap<String, Integer>> fillMaps = new ArrayList<HashMap<String, Integer>>(); 
    for(int i = 0; i < eventTitles.length; i++){ 
     HashMap<String, Integer> map = new HashMap<String, Integer>(); 

     map.put("image", clubImages[i]); 
     fillMaps.add(map); 
    } 

내가 당신이 원하는 것을 이해 바랍니다. 당신은 예를 들어, 어댑터에 전달할 데이터를 보관하는 클래스를 만들 수 :

class DataObject { 
    int imageId; 
    String firstString; 
    String secondString; // add here any string that you want to put in your list 

    public DataObject(String firstString, String secondString, int imageId) { 
     this.imageId = imageId; 
     this.firstString = firstString; 
     this.secondString = secondString; 
    } 
} 

그런 다음 어댑터의 목록을 구성하십시오 getView() 방법

List<HashMap<String, DataObject>> fillMaps = new ArrayList<HashMap<String, DataObject>>(); 
    for(int i = 0; i < eventTitles.length; i++){ 
     HashMap<String, DataObject> map = new HashMap<String, DataObject>(); 

     map.put("image", new DataObject("First String", "second String", clubImages[i])); 
     fillMaps.add(map); 
    } 

를 검색 DataObject 및 콘텐츠 데이터를 사용하십시오.

+0

을 도울 수있는 좋은 예입니다. List > 및 List >을 SimpleAdapter에 전달할 수 있습니까? –

+0

@MatsRaemen 제 대답을 편집했습니다. 이것이 당신이 원하는 것이라 희망합니다. – Luksprog

+0

이것은 정확히 필요한 것처럼 보이지만 getView() 메소드의 DataObject에서 calues를 얻는 방법을 알아낼 수 없습니다. 예를 들어 TextView mEventTitleTextView가 있고 TextView의 텍스트를 "First String"값으로 설정하려면 어떻게해야합니까? mEventTitleTextView.setText (results.get (position) .get ("First String")); 위대한 성공이 아니었다 –

0

here는 관련이없는 것 같았다 나는 코드에서 그들을 왼쪽, 문제는 내가 너무이 문자열을 통과해야한다는 것입니다 당신에게

enter image description here

관련 문제