项目的目录和架构 java
自定义的ListView的目录结构以下,其必需要设置为Library才可被其它项目使用,使用者只须要将此工程导入到eclipse中便可使用,具体结构如图所示:android
例子的目录结构以下,其必需要将自定义的ListView做为Library引用进来,如图所示:架构
使用方法app
接下来咱们讲一下例子中相关的知识点。eclipse
首先看一下布局文件中的内容 refreshmore.xml中的内容。ide
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.xiaocui.refreshlistview.PullToRefreshListView xmlns:mylistview="http://schemas.android.com/apk/res/com.xiaocui.pulltorefresh.sample" android:id="@+id/pull_to_refreshmore_listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/transparent" mylistview:mode="both" /> </LinearLayout>
注意:布局
1. post
xmlns:mylistview="http://schemas.android.com/apk/res/com.xiaocui.pulltorefresh.sample"
mylistview是自定义的一个命名空间,经过mylistview能够设置对应的属性。在这里设置的mode="both"
ui
2. 后面的 com.xiaocui.pulltorefresh.sample是应用的包名。this
接下来,咱们再看一下java代码中的写法:
package com.xiaocui.pulltorefresh.sample; import java.util.ArrayList; import com.xiaocui.pulltorefresh.sample.R; import com.xiaocui.refreshlistview.PullToRefreshBase.OnRefreshListener; import com.xiaocui.refreshlistview.PullToRefreshListView; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; public class RefreshListViewActivity extends Activity { private PullToRefreshListView listView; private ListView listShow; private ListViewSampleAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.refreshmore); listView = (PullToRefreshListView) findViewById(R.id.pull_to_refreshmore_listview); listShow = listView.getRefreshableView(); listView.setOnRefreshListener(refreshListener); adapter = new ListViewSampleAdapter(RefreshListViewActivity.this); listShow.setAdapter(adapter); //这里是模拟数据,在实际项目中,能够根据业务需求展现不一样的数据。 adapter.loadData(); } /** * 上拉刷新,下拉获取更多 */ OnRefreshListener refreshListener = new OnRefreshListener() { // 获取更多操做 @Override public void onMore() { moreList(); } @Override public void onRefresh() { refreshList(); } }; private void refreshList() { //为了便于演示,这里延长了1s的等待时间。 listView.postDelayed(new Runnable() { @Override public void run() { //完成刷新的功能,将头部分隐藏。 listView.onRefreshComplete(); } }, 1000); } private void moreList() { //为了便于演示,这里延长了1sd的等待时间。 listView.postDelayed(new Runnable() { @Override public void run() { //完成加载更多的功能,将头部分隐藏。 listView.onRefreshComplete(); } }, 1000); } class ListViewSampleAdapter extends android.widget.BaseAdapter { private ArrayList<String> items = new ArrayList<String>(); LayoutInflater inflater; public ListViewSampleAdapter(Context context){ inflater = LayoutInflater.from(context); } public class ViewHolder { public String id; public TextView name; } /** * Loads the data. */ public void loadData() { items = new ArrayList<String>(); items.add("Ajax Amsterdam"); items.add("Barcelona"); items.add("Manchester United"); items.add("Chelsea"); items.add("Real Madrid"); items.add("Bayern Munchen"); items.add("Internazionale"); items.add("Valencia"); items.add("Arsenal"); items.add("AS Roma"); items.add("Tottenham Hotspur"); items.add("PSV"); items.add("Olympique Lyon"); items.add("AC Milan"); items.add("Dortmund"); items.add("Schalke 04"); items.add("Twente"); items.add("Porto"); items.add("Juventus"); // MANDATORY: Notify that the data has changed notifyDataSetChanged(); } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; String record = (String) getItem(position); ViewHolder viewHolder = new ViewHolder(); if (convertView == null) { rowView = inflater.inflate(R.layout.list_item, null); viewHolder.name = (TextView) rowView.findViewById(R.id.textView1); rowView.setTag(viewHolder); } final ViewHolder holder = (ViewHolder) rowView.getTag(); holder.name.setText(record); return rowView; } } }
至此本部分就能够运行了。