2014-01-19 2 views
0

Я новичок в android, и я столкнулся с проблемой в строке «ListAdapter adapter», может ли кто-нибудь помочь мне ниже, я упомянул мой код, в котором изображение не отображается, потому что map.put значение изображения не может конвертировать обратно в int из строки.Установить изображение в listview

MainActivity.java

public class MainActivity extends Activity { 

private int id; 
private Time today = new Time(Time.getCurrentTimezone()); 
private ImageView aImage; 
private Bitmap bMap; 
private ListView listView; 
private ArrayList<HashMap<String, String>> values = new ArrayList<HashMap<String, String>>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //aImage = (ImageView)findViewById(R.id.AImage); 

    listView = (ListView) findViewById(R.id.list); 

    java.lang.reflect.Field[] list = R.drawable.class.getFields(); 
    //for(int i=0;i<list.length;i++){ 
    for (int i=0;i<9;i++){ 
    try { 
     id = list[i].getInt(null); 
     today.setToNow(); 

     //System.out.println("------------------"+id+"---------------"); 

     bMap = BitmapFactory.decodeResource(getResources(), id); 

     bMap = Bitmap.createScaledBitmap(bMap, 50, 50, true); 
     //aImage.setImageBitmap(bMap);   

     HashMap<String, String> map = new HashMap<String, String>(); 


     map.put("img", String.valueOf(bMap)); 

     map.put("time", today.format("%k:%M")); 

     values.add(map); 

     new CheckinDetail().execute();   


    } catch (IllegalAccessException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    }  
} 

class CheckinDetail extends AsyncTask<String, String, String> { 


    @SuppressWarnings("deprecation") 
    protected String doInBackground(String... args) { 

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 

     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 
       //int in = Integer.valueOf(et.getText().toString()); 

       ListAdapter adapter = new SimpleAdapter(MainActivity.this, values, R.layout.rowlayout, new String[] { "img","time"},new int[] { R.id.AImage, R.id.time}); 

        listView.setAdapter(adapter); 
        listView.setCacheColorHint(Color.TRANSPARENT); 

      } 
     }); 

    } 
} 
} 
+0

Использование HashMap map = new HashMap (); В этом случае вы можете поместить экземпляры Bitmap в хэш-набор. – Antonio

ответ

0

Используйте List<Map<String, Object>> вместо этого. В этом случае вы можете поместить объект разных типов в качестве значения.

В вашем случае это будет:

// definition 
private List<Map<String, Object>> values = new ArrayList<HashMap<String, Object>>(); 

// ... 
// initialization 

HashMap<String, String> map = new HashMap<String, String>(); 
map.put("img", bMap); 
map.put("timeString", today.format("%k:%M")); 
values.add(map); 

Затем, чтобы сделать эту работу с SimpleAdapter вы должны дать ему обычай SimpleAdapter.ViewBinder, где вам следует извлечь растровое изображение с карты и установить его к элементу корреспондент UI (ImageView).

Смежные вопросы