2014-02-23 2 views
1

누구나이 질문에 도움을 줄 수 있습니까? 사용자 지정 listview가 백그라운드에서 사진을로드하여 응답 시간을 줄일 수 있기를 원합니다.사용자 정의 간단한 어댑터를 사용할 때 배경에 이미지를로드하려면 어떻게해야합니까?

게다가,이 사용자 지정 목록보기를 사용하여 더 많은 레코드를로드하려는 경우 어떻게 알 수 있습니까?

감사합니다.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    StrictMode.ThreadPolicy policy = new  StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    setContentView(R.layout.activity); 
    //ProgressDialog dialog = ProgressDialog.show(this, "", "Loading...", true); 
    //new Thread(new Runnable() { 
     // public void run() { 
     list = (ListView) findViewById(R.id.MyListView); mylist = new ArrayList<HashMap<String, Object>>(); 





     try{ 
     LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE); 

     Criteria criteria = new Criteria(); 
     String provider = locationManager.getBestProvider(criteria, true); 
     Location location = locationManager.getLastKnownLocation(provider); 
     lat = location.getLatitude(); 
     lon = location.getLongitude(); 
     mylist=latlng(mylist,lat,lon,From); 
     }catch(Exception e){ 
      //ShowMsgDialog(e.toString()); 

     } 
     mSchedule = new SimpleAdapter(this, mylist, R.layout.texteest,new String[] {"textView1","imageView1","textView3"},new int[] {R.id.textView1,R.id.imageView1,R.id.textView3}); 
     mSchedule.setViewBinder(new MyViewBinder()); 
      list.setAdapter(mSchedule); 
      Button btn_map; 
      btn_map=(Button)findViewById(R.id.button1); 

      list.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 



        Intent i = new Intent(this,"other_java".class); 
        startActivity(i); 
       } 
     }); 
      btn_map.setOnClickListener(new ImageButton.OnClickListener(){ 
      public void onClick(View v) { 
       //mapresult = Map.showmap; 

        Intent i = new Intent(this,Map.class); 
        startActivity(i); 
       }}); 

     } 


private ArrayList<HashMap<String, Object>> latlng(ArrayList<HashMap<String, Object>> mylist,double lat,double lon, int from2) { 

     try{ 

      ArrayList<NameValuePair> params =new ArrayList<NameValuePair>();  
       params.add(new BasicNameValuePair("lat",String.valueOf(lat))); 
       params.add(new BasicNameValuePair("lng",String.valueOf(lon))); 
      params.add(new BasicNameValuePair("fromwhere",String.valueOf(From))); 

       result = httprequestjava.executeQuery(params); 


     mapresult = result; 
     result = result.substring(1); 

     JSONArray jsonArray = new JSONArray(result); 


    // result = ""; 
     for(int i = 0; i < jsonArray.length(); i++) { 
      JSONObject jsonData = jsonArray.getJSONObject(i); 

      HashMap<String, Object> map = new HashMap<String, Object>(); 
      map.put("textView1",jsonData.getString("somecontent")); 
      myUrl = new URL(jsonData.getString("img_src")); 
       InputStream inputStream = (InputStream)myUrl.getContent(); 
       Drawable drawable = Drawable.createFromStream(inputStream, null); 
       Bitmap mIcon1 =BitmapFactory.decodeStream(myUrl.openConnection().getInputStream()); 
      map.put("imageView1",mIcon1); 
      map.put("textView3",jsonData.getString("distance")+"m"); 
      //map.put("ItemText", "This is text....."); 
      //type is not yet done 
      mylist.add(map); 


     } 
     }catch(Exception e){ 
      Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_SHORT).show(); 
     } 

     return mylist; 

} 



class MyViewBinder implements ViewBinder 
{ 
    @Override 
    public boolean setViewValue(View view, Object data, 
      String textRepresentation) { 
     if((view instanceof ImageView)&(data instanceof Bitmap)) 
     { 
      try{ 
      ImageView iv = (ImageView)view; 
      Bitmap bmp = (Bitmap)data; 
      iv.setImageBitmap(bmp); 
      }catch(Exception e) 
      { 
       Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_SHORT).show(); 
      } 
      return true; 
     } 
     return false; 
    } 


} 

//auto gen 

}

답변

0

사용 Universal Image Loader 라이브러리는 이미지가 쉽게 작업을 다운로드 할 수 있습니다. 작업이 훨씬 간단 해지고 코드를 깨끗하게 유지하는 데 도움이됩니다.

+0

어떻게하면됩니까? 이클립스는 오류가 있지만 그 중 하나를 찾을 수 없다고 말했다. – LazyP

+0

우선, 생산 품질 코드에 적합하지 않은 UI 스레드에서 네트워크 작업을하려고한다. 프로젝트에서 [UIL] (https://github.com/nostra13/Android-Universal-Image-Loader) 라이브러리를 가져와 사용하고 [AsyncTask] (http://developer.android.com/reference/)에 대해 알아보십시오. android/os/AsyncTask.html) 훨씬 더 깨끗하고 정확한 코드를 작성할 수 있습니다. –