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
}
어떻게하면됩니까? 이클립스는 오류가 있지만 그 중 하나를 찾을 수 없다고 말했다. – LazyP
우선, 생산 품질 코드에 적합하지 않은 UI 스레드에서 네트워크 작업을하려고한다. 프로젝트에서 [UIL] (https://github.com/nostra13/Android-Universal-Image-Loader) 라이브러리를 가져와 사용하고 [AsyncTask] (http://developer.android.com/reference/)에 대해 알아보십시오. android/os/AsyncTask.html) 훨씬 더 깨끗하고 정확한 코드를 작성할 수 있습니다. –