android 上拉加载数据下拉更新数据操作
先上图:
主要代码
MainActivity
package com.listviewaddheader.ui; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Toast; import com.example.listviewaddheader.R; import com.listviewaddheader.adapter.ListViewAdapter; import com.listviewaddheader.adapter.TopViewPagerAdapter; import com.listviewaddheader.model.Information; import com.listviewaddheader.view.XListView; import com.listviewaddheader.view.XListView.IXListViewListener; public class MainActivity extends Activity implements OnItemClickListener, OnPageChangeListener, IXListViewListener { private Context mContext = this; private XListView mListView; private LayoutInflater mInflater; private View mHeaderView; private ListViewAdapter mAdapter; private List<Information> mInformationList; private List<String> mImageList; private ViewPager mTopViewPager; private TopViewPagerAdapter mTopViewPagerAdapter; private Handler mHandler; private int start = 0; private static int refreshCnt = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getData(); getView(); setListener(); } private void getView() { if (mInflater == null) { mInflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } mListView = (XListView) this.findViewById(R.id.lv); mListView.setPullLoadEnable(true); mHeaderView = mInflater.inflate(R.layout.viewpager_main, null); mTopViewPagerAdapter = new TopViewPagerAdapter(mContext, mImageList); mTopViewPager = (ViewPager) mHeaderView.findViewById(R.id.viewpager); mTopViewPager.setAdapter(mTopViewPagerAdapter); mListView.addHeaderView(mHeaderView); mAdapter = new ListViewAdapter(mContext, mInformationList); mListView.setAdapter(mAdapter); mListView.setXListViewListener(this); mHandler = new Handler(); } private void setListener() { // TODO Auto-generated method stub mListView.setOnItemClickListener(this); mTopViewPager.setOnPageChangeListener(this); } public void getData() { mInformationList = new ArrayList<Information>(); for (int i = 0; i < 10; i++) { Information information = new Information(); information.setDesc("第" + i + "s条描述"); information.setTitle("第" + i + "s条标题"); information.setPd("这是商品介绍"+i); mInformationList.add(information); } mImageList = new ArrayList<String>(); mImageList .add("http://img2.imgtn.bdimg.com/it/u=3675742480,2498904140&fm=21&gp=0.jpg"); mImageList .add("http://img1.imgtn.bdimg.com/it/u=2705048742,611875765&fm=21&gp=0.jpg"); mImageList .add("http://img0.imgtn.bdimg.com/it/u=1663788412,3440955990&fm=21&gp=0.jpg"); mImageList .add("http://img2.imgtn.bdimg.com/it/u=1664194419,2178175637&fm=21&gp=0.jpg"); mImageList .add("http://img1.imgtn.bdimg.com/it/u=1611159065,380062274&fm=21&gp=0.jpg"); } public void getData2() { //mInformationList = new ArrayList<Information>(); for (int i = 0; i < 10; i++) { Information information = new Information(); information.setDesc("第" + i + i + "条描述"); information.setTitle("第" + i + i + "条标题"); information.setPd("这是商品介绍"+i); mInformationList.add(information); } // mImageList = new ArrayList<String>(); // mImageList // .add("http://ys.rili.com.cn/images/image/201401/01111959pp.jpg"); // mImageList // .add("http://ys.rili.com.cn/images/image/201401/0111174780.jpg"); // mImageList // .add("http://ys.rili.com.cn/images/image/201401/011121360w.jpg"); // mImageList // .add("http://ys.rili.com.cn/images/image/201401/01112258p9.jpg"); // mImageList // .add("http://ys.rili.com.cn/images/image/201401/01112527zp.jpg"); } @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { // TODO Auto-generated method stub dosomething(parent.getAdapter().getItem(position)); } private void dosomething(Object item) { // TODO Auto-generated method stub Toast.makeText(mContext, ((Information) item).getTitle(), 1000).show(); } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } private void onLoad() { mListView.stopRefresh(); mListView.stopLoadMore(); mListView.setRefreshTime("刚刚"); } @Override public void onRefresh() { // TODO Auto-generated method stub mHandler.postDelayed(new Runnable() { @Override public void run() { start = ++refreshCnt; //System.out.println("清除数据:"+start); mInformationList.clear(); getData(); //getView(); //mAdapter.notifyDataSetChanged(); mAdapter = new ListViewAdapter(mContext, mInformationList); mListView.setAdapter(mAdapter); onLoad(); } }, 2000); } @Override public void onLoadMore() { // TODO Auto-generated method stub mHandler.postDelayed(new Runnable() { @Override public void run() { getData2(); mAdapter.notifyDataSetChanged(); onLoad(); } }, 2000); } }
getData()是自己添加数据
getData()2是加载更新用到的数据,可访问数据库获取。
onRefresh是刷新数据
onLoadMore加载更多数据 list_item.xml加载数据的item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="5dip" tools:context=".MainActivity" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/viewlist" android:layout_centerVertical="true" android:layout_marginRight="22dp" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="74dp" android:layout_height="74dp" android:layout_alignLeft="@+id/tv_title" android:layout_below="@+id/tv_title" android:src="@drawable/loading" /> </LinearLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/viewlist" android:layout_centerVertical="true" android:layout_marginRight="22dp" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginTop="5dip" android:text="测试标题" /> <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/tv_title" android:layout_marginTop="5dip" android:text="测试内容" /> <TextView android:id="@+id/tv_dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tv_desc" android:layout_marginTop="5dp" android:layout_centerHorizontal="true" android:text="测试其他数据" /> </RelativeLayout > </LinearLayout>
ListViewAdapter.java自定义控件数据处理
package com.listviewaddheader.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.listviewaddheader.R; import com.listviewaddheader.model.Information; public class ListViewAdapter extends BaseAdapter { private Context mContext = null; private List<Information> mInformationList; private LayoutInflater mLayoutInflater; public ListViewAdapter(Context context, List<Information> informationList) { mContext = context; mInformationList = informationList; if (mLayoutInflater == null) { mLayoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } } @Override public int getCount() { // TODO Auto-generated method stub return mInformationList != null ? mInformationList.size() : 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mInformationList != null ? mInformationList.get(position) : null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ListViewHolder viewHolder = null; if (convertView == null) { convertView = mLayoutInflater.inflate(R.layout.list_item, null); viewHolder = getListViewHolder(convertView); convertView.setTag(viewHolder); } else { // 取得缓存数据 viewHolder = (ListViewHolder) convertView.getTag(); } setContentView(viewHolder, position); return convertView; } private void setContentView(ListViewHolder viewHolder, int position) { // TODO Auto-generated method stub Information information = null; if (mInformationList != null && mInformationList.size() > 0) { information = mInformationList.get(position); viewHolder.mTitleTextView.setText(information.getTitle()); viewHolder.mDescTextView.setText(information.getDesc()); viewHolder.mPdTextView.setText(information.getPd()); } } private ListViewHolder getListViewHolder(View convertView) { ListViewHolder holder = new ListViewHolder(); holder.mTitleTextView = (TextView) convertView .findViewById(R.id.tv_title); holder.mDescTextView = (TextView) convertView .findViewById(R.id.tv_desc); holder.mPdTextView = (TextView) convertView .findViewById(R.id.tv_dp); return holder; } public class ListViewHolder { public TextView mTitleTextView; public TextView mDescTextView; public TextView mPdTextView; } }
源码可以在这里下载,虽然有点小贵主要是我没积分了是在不好意思,但是这绝对物超所值