在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好、方便的用户体验,以滑动、下拉的效果动态加载数据的要求就会出现。为此,该效果功能就需要应用到所需要的展示页面中。
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="PullToRefresh"> <attr name="mode" format="reference" > <flag name="pullDownFromTop" value="0x1" /> <flag name="pullUpFromBottom" value="0x2" /> <flag name="both" value="0x3" /> </attr> </declare-styleable> </resources> srings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">SampleDemo</string> <string name="action_settings">Settings</string> <string name="pull_to_refresh_pull_down_label">滑动刷新</string> <string name="pull_to_refresh_release_label">释放刷新</string> <string name="pull_to_refresh_refreshing_label">加载中</string> <string name="pull_to_refresh_tap_label">点击刷新</string> </resources>第三步:将所需要的图片文件放入相应的文件夹下面,所用的图片文件有:
import java.util.LinkedList; import com.example.sampledemo.view.PullToRefreshListView; import android.os.AsyncTask; import android.widget.BaseAdapter; public class PullTask extends AsyncTask<Void, Void, String>{ private PullToRefreshListView pullToRefreshListView; //实现下拉刷新与上拉加载的ListView private int pullState; //记录判断,上拉与下拉动作 private BaseAdapter baseAdapter; //ListView适配器,用于提醒ListView数据已经更新 private LinkedList<String> linkedList; public PullTask(PullToRefreshListView pullToRefreshListView, int pullState, BaseAdapter baseAdapter, LinkedList<String> linkedList) { this.pullToRefreshListView = pullToRefreshListView; this.pullState = pullState; this.baseAdapter = baseAdapter; this.linkedList = linkedList; } @Override protected String doInBackground(Void... params) { try { Thread.sleep(1000); } catch (InterruptedException e) { } return "StringTest"; } @Override protected void onPostExecute(String result) { if(pullState == 1) {//name="pullDownFromTop" value="0x1" 下拉 linkedList.addFirst("顶部数据"); } if(pullState == 2) {//name="pullUpFromBottom" value="0x2" 上拉 linkedList.addLast("底部数据"); } baseAdapter.notifyDataSetChanged(); pullToRefreshListView.onRefreshComplete(); super.onPostExecute(result); } }
import java.util.LinkedList; import com.example.sampledemo.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class PullAdapter extends BaseAdapter { private LinkedList<String> linkedList; private LayoutInflater mInflater; public PullAdapter(LinkedList<String> linkedList, Context context) { mInflater = LayoutInflater.from(context); this.linkedList = linkedList; } @Override public int getCount() { return linkedList.size(); } @Override public Object getItem(int position) { return linkedList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.layout_main_listitem, null); holder.textView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } if(linkedList.size()>0){ final String dataStr = linkedList.get(position); holder.textView.setText(dataStr); } return convertView; } private static class ViewHolder { TextView textView; //数据显示区域 } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <TextView android:id="@+id/textView" android:textColor="#99CC66" android:textSize="18dp" android:layout_marginTop="4dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="left" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="10dp" android:paddingBottom="10dip"> <TextView android:id="@+id/pull_to_refresh_text" android:text="@string/pull_to_refresh_pull_down_label" android:textAppearance="?android:attr/textAppearanceMedium" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> <ProgressBar android:id="@+id/pull_to_refresh_progress" android:indeterminate="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dip" android:layout_marginRight="20dip" android:visibility="gone" android:layout_centerVertical="true" style="?android:attr/progressBarStyleSmall" /> <ImageView android:id="@+id/pull_to_refresh_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dip" android:layout_marginRight="20dip" android:layout_centerVertical="true" /> </RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:cp="http://schemas.android.com/apk/res/com.example.sampledemo" android:layout_width="match_parent" android:background="#FFFFFF" android:layout_height="match_parent"> <com.example.sampledemo.view.PullToRefreshListView android:id="@+id/pullrefresh" android:background="#FFFFFF" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@android:color/black" android:dividerHeight="0.1dip" android:cacheColorHint="#00000000" cp:mode="both"> </com.example.sampledemo.view.PullToRefreshListView> </RelativeLayout>
import java.util.Arrays; import java.util.LinkedList; import com.example.sampledemo.view.PullToRefreshBase.OnRefreshListener; import com.example.sampledemo.view.PullToRefreshListView; import com.example.sampledemo.view.adapter.PullAdapter; import com.example.sampledemo.view.task.PullTask; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import android.app.Activity; /** * @ClassName MainActivity.java * @Author MaHaochen * @Date 2014-4-30 15:56:47 */ public class MainActivity extends Activity { private LinkedList<String> mListItems; private PullToRefreshListView mPullRefreshListView; private ArrayAdapter<String> mAdapter; private ListView mListView; private PullAdapter pullAdapter; private String[] mStrings = { "初始数据01","初始数据02","初始数据03","初始数据04","初始数据05" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pullrefresh); mPullRefreshListView.setOnRefreshListener(mOnrefreshListener); mListView = mPullRefreshListView.getRefreshableView(); mListItems = new LinkedList<String>(); mListItems.addAll(Arrays.asList(mStrings)); pullAdapter = new PullAdapter(mListItems, MainActivity.this); mListView.setAdapter(pullAdapter); } OnRefreshListener mOnrefreshListener = new OnRefreshListener() { public void onRefresh() { PullTask pullTask = new PullTask(mPullRefreshListView, mPullRefreshListView.getRefreshType(), pullAdapter, mListItems); pullTask.execute(); } }; }
Android 下拉刷新上拉加载效果功能,布布扣,bubuko.com
原文:http://blog.csdn.net/mahoking/article/details/27327825