Android listView的上拉刷新(加载更多)
投稿于 被查看 49919 次 评论:50
Android listView的上拉刷新(加载更多)
以前也实现过,ListView的上拉刷新,不过用的是开源代码,由于本人比较懒吧,源码也没怎么研究,所以现在写出来还不是那么流利。还好本人发现了自己的这些特点,所以写出来个Demo,基本实现了ListView的上拉说新,当做练习了,可能还不是那么完美,以后根据开源代码的研究,会写出更好的并且简单易懂的下拉说新Demo来发表。
实现效果图:
直接上代码吧:
MainActivity:
package com.listdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; private MyAdapter adapter; private Listlist = new ArrayList (); private List listAll = new ArrayList (); private Map map = new HashMap (); private boolean is_divPage;// 是否进行分页操作 private MyAdapter mAdatper; private TextView tv_msg; private LinearLayout loading; private LinearLayout list_footer; // public static int pageNum = 1;// 设置pageNo的初始化值为1,即默认获取的是第一页的数据。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView1); /** * 添加ListView的footer */ list_footer = (LinearLayout) getLayoutInflater().inflate( R.layout.list_footer, null); list_footer.setBackgroundColor(Color.parseColor(#ffffff)); tv_msg = (TextView) list_footer.findViewById(R.id.tv_msg);// 更多 loading = (LinearLayout) list_footer.findViewById(R.id.loading);// 读取中+progressBar tv_msg.setVisibility(View.GONE); loading.setVisibility(View.VISIBLE); listView.addFooterView(list_footer); /** * listView中添加数据 */ initData(); /** * 将每页数据(list中每次存储的数据)添加到ListAll(存储所有的数据)中。 */ listAll.addAll(list); adapter = new MyAdapter(this, listAll); listView.setAdapter(adapter); /** * listview的监听事件 */ listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { /** * 如果等到该分页(is_divPage = true)的时候,并且滑动停止(这个时候手已经离开了屏幕),自动加载更多。 */ if (is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { Toast.makeText(MainActivity.this, 正在获取更多数据..., Toast.LENGTH_SHORT).show(); Log.d(zhongyao, 调用onScrollStateChanged!!!!); initData(); listAll.addAll(list); adapter.notifyDataSetChanged(); tv_msg.setVisibility(View.INVISIBLE); loading.setVisibility(View.VISIBLE); } else if (!is_divPage && scrollState == OnScrollListener.SCROLL_STATE_IDLE) { tv_msg.setVisibility(View.VISIBLE); loading.setVisibility(View.INVISIBLE); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount); } }); } private void initData() { list.clear(); for (int i = 0; i < 10; i++) { list.add(zhongyao +i); } } }
适配器:
MyAdapter:
package com.listdemo; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import android.widget.Toast; /** * 适配器 * @author Administrator * */ public class MyAdapter extends BaseAdapter { private Context context; private Listlist = new ArrayList (); public MyAdapter(Context contex, List list) { this.context = contex; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate( R.layout.list_item, null); holder.tv_name = (TextView) convertView .findViewById(R.id.textView1); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv_name.setText(list.get(position)); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, 您的选择是: + position, 1).show(); } }); return convertView; } class ViewHolder { private TextView tv_name, tv_age; } }
布局文件:
activity_main:
list_item;
list_footer:
用户评论