Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 下拉刷新上拉加載效果功能

Android 下拉刷新上拉加載效果功能

編輯:關於Android編程

應用場景:

在App開發中,對於信息的獲取與演示,不可能全部將其獲取與演示,為了在用戶使用中,給予用戶以友好、方便的用戶體驗,以滑動、下拉的效果動態加載數據的要求就會出現。為此,該效果功能就需要應用到所需要的展示頁面中。

知識點介紹:

本文主要根據開源項目android-pulltorefresh展開介紹。
android-pulltorefresh
【一個強大的拉動刷新開源項目,支持各種控件下拉刷新 ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal )ScrollView、Fragment上下左右拉動刷新,比下面johannilsson那個只支持ListView的強大的多。並且他實現的下拉刷新ListView在item不足一屏情況下也不會顯示刷新提示,體驗更好。】
 
第一步:新建Android工程SampleDemo
第二步:在res/values下新建attrs.xml


    
        
            
            
            
        
    

srings.xml


    SampleDemo
    Settings
    滑動刷新
    釋放刷新
    加載中
    點擊刷新
第三步:將所需要的圖片文件放入相應的文件夾下面,所用的圖片文件有: \
第四步:
1、導入或將開源項目android-pulltorefresh中需要的類文件(.java),加入到自己的項目中的指定包內。
該演示用例涉及的類文件為:
【librarysrccomhandmarkpulltorefreshlibrary】
PullToRefreshAdapterViewBase.java
PullToRefreshBase.java
PullToRefreshListView.java
【librarysrccomhandmarkpulltorefreshlibraryinternal】
EmptyViewMethodAccessor.java
LoadingLayout.java
2、構建自己所需要的類文件(.java)。
【PullTask.java】
import java.util.LinkedList;

import com.example.sampledemo.view.PullToRefreshListView;

import android.os.AsyncTask;
import android.widget.BaseAdapter;

public class PullTask extends AsyncTask{

	private PullToRefreshListView pullToRefreshListView;  //實現下拉刷新與上拉加載的ListView
	private int pullState;               //記錄判斷,上拉與下拉動作
	private BaseAdapter baseAdapter;     //ListView適配器,用於提醒ListView數據已經更新
	private LinkedList linkedList;
	
	public PullTask(PullToRefreshListView pullToRefreshListView, int pullState,
			BaseAdapter baseAdapter, LinkedList 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);
	}
}

【PullAdapter.java】
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 linkedList;
	private LayoutInflater mInflater;
	
	public PullAdapter(LinkedList 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;        //數據顯示區域
	}
}

第四步:為PullAdapter.java 設計布局文件layout_main_listitem.xml


    

滑動時出現提醒布局文件pull_to_refresh_header.xml


     
     
    

MainActivity.java 主布局文件activity_main.xml

	
	

第五步:編寫MainActivity.java
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 mListItems;
	private PullToRefreshListView mPullRefreshListView;
	private ArrayAdapter 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();
		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();
		}
	};
}

下載地址:

http://download.csdn.net/detail/ma_hoking/7276365

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved