android 之ListView总结(一个综合实例)
生活随笔
收集整理的這篇文章主要介紹了
android 之ListView总结(一个综合实例)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實例效果:
后臺邏輯:
package com.hsj.example.paginationloadnetdatademo02;import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView;import com.hsj.example.paginationloadnetdatademo02.com.hsj.domain.Movie; import com.hsj.example.paginationloadnetdatademo02.com.hsj.utils.Utils;import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private ListView listView_movies;private MyAdapter adapter;private String path;private int pageNo=1;private int pageSize=20;//總數據源private List<Movie> data=new ArrayList<>();// 存放最后一個可見條目的索引值private int lastVisibleItem;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.listView_movies= (ListView) this.findViewById(R.id.listView_movies);View footerView=View.inflate(this,R.layout.footer_view,null);this.listView_movies.addFooterView(footerView);this.listView_movies.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if(lastVisibleItem==adapter.getCount() && scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){pageNo++;try {path = "https://movie.douban.com/j/search_subjects?type=movie&tag="+ URLEncoder.encode("熱門","utf-8")+"&sort=recommend&page_limit="+pageSize+"&page_start="+(pageNo-1)*pageSize;} catch (UnsupportedEncodingException e) {e.printStackTrace();}new LoadNetDataAsyncTask().execute(path);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {lastVisibleItem=firstVisibleItem+visibleItemCount-1;}});try {path = "https://movie.douban.com/j/search_subjects?type=movie&tag="+ URLEncoder.encode("熱門","utf-8")+"&sort=recommend&page_limit="+pageSize+"&page_start="+(pageNo-1)*pageSize;new LoadNetDataAsyncTask().execute(path);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}private final class LoadNetDataAsyncTask extends AsyncTask<String,Void,List<Movie>>{@Overrideprotected List<Movie> doInBackground(String... params) {try {InputStream inputStream=Utils.getInputStreamByPath(params[0]);if(inputStream!=null){String json=Utils.getStringByInputStream(inputStream);SystemClock.sleep(3000);return Utils.getListMovies(json);}} catch (Exception e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(List<Movie> movies) {if(movies!=null){//將當前頁的數據添加到大集合中data.addAll(movies);if(adapter==null){adapter=new MyAdapter(data);listView_movies.setAdapter(adapter);}else{//更新界面adapter.notifyDataSetChanged();}}}}private final class MyAdapter extends BaseAdapter{private List<Movie> movies;private LayoutInflater layoutInflater;private ViewHolder viewHolder=null;public MyAdapter(List<Movie> movies) {this.movies=movies;layoutInflater=LayoutInflater.from(MainActivity.this);}@Overridepublic int getCount() {return movies.size();}@Overridepublic Object getItem(int position) {return movies.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Movie movie= movies.get(position);final String cover=movie.getCover();if(convertView==null){viewHolder=new ViewHolder();//將布局文件轉換成View 對象convertView=layoutInflater.inflate(R.layout.movie_item,null);viewHolder.imageView_cover= (ImageView) convertView.findViewById(R.id.imageView_cover);viewHolder.textView_title= (TextView) convertView.findViewById(R.id.textView_title);convertView.setTag(viewHolder);}else{viewHolder= (ViewHolder) convertView.getTag();}viewHolder.imageView_cover.setTag(cover);class LoadImageAsyncTask extends AsyncTask<String,Void,Bitmap>{@Overrideprotected Bitmap doInBackground(String... params) {try {InputStream inputStream=Utils.getInputStreamByPath(params[0]);if(inputStream!=null){return BitmapFactory.decodeStream(inputStream);}} catch (Exception e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Bitmap bitmap) {if(bitmap!=null){Object localUrl=viewHolder.imageView_cover.getTag();if(localUrl!=null && cover.equals(localUrl)){viewHolder.imageView_cover.setImageBitmap(bitmap);}}}}new LoadImageAsyncTask().execute(cover);viewHolder.textView_title.setText(movie.getTitle());return convertView;}}class ViewHolder{ImageView imageView_cover;TextView textView_title;} }前臺展示:
<1>一個movie_item展示
<2>一個footer_view展示
<3>一個activity_xml的展示
總結
以上是生活随笔為你收集整理的android 之ListView总结(一个综合实例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 之ListView分页效
- 下一篇: android 之图文混排+GridVi