亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android程序開發ListView+Json+異步網絡圖片加載+滾動翻頁的例子(圖片能緩存,圖片不錯亂)

2020-04-11 10:54:24
字體:
來源:轉載
供稿:網友

例子中用于解析Json的Gson請自己Google下載

主Activity:

package COM.Example.Main;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import COM.Example.Main.R;import COM.Example.Main.stringGetJson.User;import android.app.Activity;import android.app.ListActivity;import android.os.AsyncTask;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;public class stringListActivity extends ListActivity {private MyAdapter mMyAdapter;private LinkedList<User> users = null;// 當前Activity中的ListViewListView listView = null;int lastItem = 0;LinearLayout loadingLayout = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.foodlistactivity);listView = getListView();setLoadingLayout();new readTask().execute(null);}private final class MyAdapter extends ArrayAdapter<User> {public MyAdapter(Activity activity, List<User> newsList) {super(activity, 0, newsList);}private Map<Integer, View> viewMap = new HashMap<Integer, View>();@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;View rowView = this.viewMap.get(position);if (rowView == null) {User user = users.get(position);LayoutInflater inflater = ((Activity) this.getContext()).getLayoutInflater();holder = new ViewHolder();rowView = inflater.inflate(R.layout.foodlistactivity_item, null);holder.mNameText = (TextView) rowView.findViewById(R.id.foodItemUsername);holder.mPhoto = (ImageView) rowView.findViewById(R.id.foodItemPic);rowView.setTag(holder);holder.mNameText.setText(user.Name);if (!holder.mPhoto.isDrawingCacheEnabled()) {holder.mPhoto.setTag(user.Pic);new downImageTask().execute(holder.mPhoto);holder.mPhoto.setDrawingCacheEnabled(true);}viewMap.put(position, rowView);} else {holder = (ViewHolder) rowView.getTag();}return rowView;}public class ViewHolder {public TextView mNameText;public ImageView mPhoto;}}public void setLoadingLayout() {LinearLayout layout = new LinearLayout(this);layout.setOrientation(LinearLayout.HORIZONTAL);ProgressBar progressBar = new ProgressBar(this); progressBar.setPadding(0, 0, 15, 0); layout.addView(progressBar); TextView textView = new TextView(this); textView.setText("加載中..."); textView.setGravity(Gravity.CENTER_VERTICAL); layout.addView(textView); layout.setGravity(Gravity.CENTER); loadingLayout = new LinearLayout(this); loadingLayout.addView(layout); loadingLayout.setGravity(Gravity.CENTER); } private class scrollListener implements OnScrollListener { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 當listView中沒有數據,或者數據超過100條,或者不是10的整數倍(即數據不足)時隱藏“更多”并取消onScroll事件的綁定 if (mMyAdapter.getCount() >= 100 || mMyAdapter.getCount() % 10 > 0 || mMyAdapter.getCount() == 0) { listView.removeFooterView(loadingLayout); listView.setOnScrollListener(null); } lastItem = firstVisibleItem + visibleItemCount - 1;// 這里減一是因為有FootView } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (lastItem == mMyAdapter.getCount() && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { // 進行翻頁操作 new scrollTask().execute(null); } } } public class readTask extends AsyncTask<Object, Void, Void> { @Override protected Void doInBackground(Object... arg0) { users = new stringGetJson().getJson(); return null; } @Override protected void onPostExecute(Void result) { listView.addFooterView(loadingLayout); mMyAdapter = new MyAdapter(stringListActivity.this, users); setListAdapter(mMyAdapter); listView.setOnScrollListener(new scrollListener()); } } public class scrollTask extends AsyncTask<Object, Void, Void> { @Override protected Void doInBackground(Object... arg0) { for (Iterator iterator = new stringGetJson().getJson() .iterator(); iterator.hasNext();) { User user = (User) iterator.next(); users.add(user); } return null; } @Override protected void onPostExecute(Void result) { mMyAdapter.notifyDataSetChanged(); } } }

Json數據來源(這里的例子中把json字符串直接寫在代碼中了,實際項目中需要改成從網絡讀取,例子中已經使用了多線程):

package COM.Example.Main;import java.lang.reflect.Type;import java.util.Iterator;import java.util.LinkedList;import android.database.MatrixCursor;import android.widget.ListView;import android.widget.TextView;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class stringGetJson {// 設置臨時ID,在項目中將被現實的id取代private int id = 0;public stringGetJson() {super();}//通過getJson方法從Json字符串獲取User的列表public LinkedList<User> getJson() {String jsonData = "[{/"Name/":/"xinuxForJson1/",/"Pic/":/"http://www.qqjay.com/uploads/110414/1_234626_5.jpg/"},{/"Name/":/"xinuxForJson2/",/"Pic/":/"http://www.qqjay.com/uploads/110414/1_234626_3.jpg/"},{/"Name/":/"xinuxForJson3/",/"Pic/":/"http://www.qqjay.com/uploads/110414/1_234626_4.jpg/"},{/"Name/":/"xinuxForJson4/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/8.jpg/"},{/"Name/":/"xinuxForJson5/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/10.jpg/"},{/"Name/":/"xinuxForJson6/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/7.jpg/"},{/"Name/":/"xinuxForJson7/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/11.jpg/"},{/"Name/":/"xinuxForJson8/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/12.jpg/"},{/"Name/":/"xinuxForJson9/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian1/9.jpg/"},{/"Name/":/"xinuxForJson10/",/"Pic/":/"http://sucai.qqjay.com/fengmian/201104/tupian/7.jpg/"}]";Type listType = new TypeToken<LinkedList<User>>() {}.getType();Gson gson = new Gson();LinkedList<User> users = gson.fromJson(jsonData, listType);return users;}//為getJson提供了數據實體類final static class User {public String Name;public String Pic;}}

圖片下載AsyncTask

package COM.Example.Main;import COM.Example.FunctionUtility.Download;import android.graphics.Bitmap;import android.os.AsyncTask;import android.widget.ImageView;public class downImageTask extends AsyncTask<ImageView, Void, Bitmap> {ImageView gView = null;@Overrideprotected Bitmap doInBackground(ImageView... arg0) {gView = (ImageView)arg0[0];return Download.getBitmapFromUrl(gView.getTag().toString());}@Overrideprotected void onPostExecute(Bitmap result) {if(result != null){this.gView.setImageBitmap(result);}this.gView = null;}}

網絡圖片下載類:

package COM.Example.FunctionUtility;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class Download {public static Bitmap getBitmapFromUrl(String imgUrl) {URL url;Bitmap bitmap = null;try {url = new URL(imgUrl);InputStream is = url.openConnection().getInputStream();BufferedInputStream bis = new BufferedInputStream(is);bitmap = BitmapFactory.decodeStream(bis);bis.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return bitmap;}}

以上所述是小編給大家分享的Android程序開發ListView+Json+異步網絡圖片加載+滾動翻頁的例子(圖片能緩存,圖片不錯亂)的相關知識,希望對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久精品免费视频| 久久精品亚洲国产| 亚洲free性xxxx护士白浆| 欧美一级片久久久久久久| 国产亚洲欧美日韩美女| 亚洲аv电影天堂网| 午夜精品久久久久久99热| www.欧美精品| 俺去啦;欧美日韩| 伊人男人综合视频网| 日本久久久a级免费| 国产欧美精品一区二区三区-老狼| 国产欧美精品xxxx另类| 国产91精品最新在线播放| 亚洲国产精品va在线看黑人动漫| 欧美巨大黑人极品精男| 成人福利在线视频| 成人精品在线视频| 日韩专区中文字幕| 久久综合色影院| 久久精品亚洲精品| 日韩一级黄色av| 91黑丝高跟在线| 国内揄拍国内精品| 亚洲影影院av| 亚洲一区二区三区777| 亚洲高清福利视频| 成人精品视频99在线观看免费| 欧美超级乱淫片喷水| 97av视频在线| 久久网福利资源网站| 一个人www欧美| 91久久国产精品91久久性色| 尤物九九久久国产精品的分类| 国产精品揄拍500视频| 欧美福利在线观看| 亚洲免费一级电影| 欧美激情网站在线观看| 国内外成人免费激情在线视频| 国产亚洲精品久久久久久777| 亚洲大尺度美女在线| 亚洲精品久久久久| 亚洲午夜未满十八勿入免费观看全集| 日本韩国在线不卡| 久精品免费视频| 国产成人avxxxxx在线看| 亚洲自拍偷拍福利| 久久久视频精品| 亚洲欧美日韩精品久久| 国产第一区电影| 精品久久久久久久中文字幕| 日韩精品视频三区| 日韩成人激情影院| 欧美亚洲一区在线| 中文日韩电影网站| 亚洲国产成人精品电影| 亚洲无亚洲人成网站77777| 91美女片黄在线观看游戏| 亚洲一区制服诱惑| 福利一区福利二区微拍刺激| 国产午夜一区二区| 91在线视频九色| 亚洲欧美资源在线| 久久精品免费电影| 日韩高清av在线| 97视频免费在线观看| 高清欧美电影在线| 中文日韩在线观看| 国产不卡精品视男人的天堂| 成人有码视频在线播放| 亚洲第一精品久久忘忧草社区| 91地址最新发布| 欧美精品手机在线| 欧美性猛交丰臀xxxxx网站| 欧美成人午夜视频| 中文字幕亚洲欧美日韩在线不卡| 亚洲国产精品yw在线观看| 欧美大片在线看| 久久亚洲电影天堂| 亚洲欧美在线播放| 国产精品91久久久久久| 亚洲第一福利视频| 秋霞成人午夜鲁丝一区二区三区| 国产精品av电影| 亚洲第一免费播放区| 国产精品jvid在线观看蜜臀| 最近免费中文字幕视频2019| 亚洲国产日韩欧美综合久久| 国产日韩欧美电影在线观看| 欧美成人在线影院| 亚洲色图偷窥自拍| www高清在线视频日韩欧美| 久久国产精品久久精品| 亚洲性生活视频在线观看| 亚洲自拍欧美色图| 中文字幕在线成人| 欧美激情精品久久久久久免费印度| 久久国产精彩视频| 91精品久久久久久久久中文字幕| 欧美性猛交xxxx乱大交极品| 91精品国产综合久久男男| 久久久精品一区二区三区| 精品成人国产在线观看男人呻吟| 亚洲视频一区二区| 视频一区视频二区国产精品| 日韩性xxxx爱| 久久久亚洲欧洲日产国码aⅴ| 久久免费视频观看| 亚洲免费一级电影| 欧美中文字幕视频在线观看| 久久成人一区二区| 中文字幕一区日韩电影| www欧美日韩| 亚洲欧美日韩中文在线| 国产玖玖精品视频| 亚洲理论片在线观看| 欧美电影《睫毛膏》| 久久精品视频99| 欧美日韩人人澡狠狠躁视频| 国产精品r级在线| 亚洲国产日韩一区| 在线观看精品国产视频| 久久久久国产精品免费网站| 国产精品视频午夜| 久久久久久高潮国产精品视| 美女撒尿一区二区三区| 国产精品国产三级国产专播精品人| 欧美成人精品在线播放| 亚洲国模精品私拍| 成人av色在线观看| 性欧美暴力猛交69hd| 这里精品视频免费| 日韩高清中文字幕| 亚洲国产高清福利视频| 正在播放国产一区| 日韩在线视频线视频免费网站| 久久国产精品免费视频| 亚洲福利视频二区| 日韩在线观看网址| 日韩精品视频在线观看免费| 国产在线一区二区三区| 欧美精品做受xxx性少妇| 国产亚洲a∨片在线观看| 国产亚洲精品久久久久动| 不卡伊人av在线播放| 日韩av电影在线免费播放| 性视频1819p久久| 欧美色道久久88综合亚洲精品| 日韩久久免费视频| 欧美国产日产韩国视频| 亚洲黄页视频免费观看| 国产在线精品自拍| 成人动漫网站在线观看| 日韩成人在线电影网| 亚洲欧美制服丝袜| 日韩在线视频中文字幕| 久久亚洲国产精品成人av秋霞| 亚洲免费影视第一页| 欧美成在线视频| 欧美性jizz18性欧美| 亚洲已满18点击进入在线看片| 国产成人精品久久| 日本精品久久电影| 色无极亚洲影院|