2012-04-07 10 views
0

2つのTextViewとImageViewを含むListViewを作成しています。ImageViewをImageViewを含むListViewに渡す

ハッシュマップを使用してSimpleAdapterにデータを渡すので、画像のIDを文字列に変換し、後でSimpleAdapterで整数に変換して画像リソースを設定します。

しかし、それは動作していないようです。

関連するコードは次のとおりです。

私のlogcatでの私の活動

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

することができます」 t R.drawable.pic1Stringとして渡してから、Integerとして解析します。

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

私は私はあなたが望むものを理解してほしい:これは単にHashMapに直接初期Integer描画可能なidを渡す代わりに、機能しません。あなたは、たとえば、アダプタに渡したいデータを保持するクラスを作ることができる:

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あなたの欲しいコンテンツデータを使用してください。問題は、私はあまりにも2つの文字列を渡す必要があるということです

+0

役立つかもしれ良い例である、それは関係ないように見えたとして、私は、コードからそれらを残しました。 List >およびList >をSimpleAdapterに渡す方法はありますか? –

+0

@MatsRaemen私は自分の答えを編集しました。これがあなたの望むものであることを願っています。 – Luksprog

+0

これは私が必要とするものと似ていますが、getView()メソッドのDataObjectからどのようにcaluesを取得するのか分かりません。たとえば、TextView mEventTitleTextViewを持っていて、そのTextViewのテキストを "First String"の値に設定するには、どうすればよいですか? mEventTitleTextView.setText(results.get(position).get( "最初の文字列"));大した成功ではありませんでした –

関連する問題