android listview下拉刷新!

来源:互联网 发布:淘宝管控记录能销吗 编辑:程序博客网 时间:2024/05/16 10:26

主要有四个状态;继承listivw;按下的状态;滑动的状态;松开的状态;开始默认状态;

package com.example.customview1406_mylistview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MyListView extends ListView {

    View viewHead;
    int viewHeight;
    final static int DONE = 1;
    final static int PULL = 2;
    final static int REALEASE = 3;
    final static int REFRESHING = 4;
    int currentState = -1;
    int downY = 0;
    TextView tvState, tvUpdateTime;
    ImageView ivArror;
    ProgressBar progressBar;
    OnRefreshingListener onRefreshingListener;

    public void setOnRefreshingListener(
            OnRefreshingListener onRefreshingListener) {
        this.onRefreshingListener = onRefreshingListener;
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        try {
            currentState = DONE;
            viewHead = View.inflate(context, R.layout.listview_header, null);
            tvState = (TextView) viewHead.findViewById(R.id.tv_state);
            tvUpdateTime = (TextView) viewHead.findViewById(R.id.tv_updateTime);
            ivArror = (ImageView) viewHead.findViewById(R.id.iv_arrow);
            progressBar = (ProgressBar) viewHead.findViewById(R.id.progressBar);
            // 测量
            viewHead.measure(0, 0);
            viewHeight = viewHead.getMeasuredHeight();

            this.addHeaderView(viewHead);
            viewHead.setPadding(0, -viewHeight, 0, 0);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // TODO Auto-generated method stub
        int action = ev.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            if (currentState == DONE) {
                downY = (int) ev.getY();
                currentState = PULL;
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (currentState == PULL) {
                int currentY = (int) ev.getY();
                int moveY = currentY - downY;
                int top = moveY + -viewHeight;
                viewHead.setPadding(0, top, 0, 0);
                if (moveY > viewHeight) {
                    this.currentState = REALEASE;
                    this.tvState.setText("松开刷新");
                }
            }
            break;
        case MotionEvent.ACTION_UP:
            if (this.currentState == REALEASE) {
                // 刷新中
                this.currentState = REFRESHING;
                this.tvState.setText("刷新中");
                this.ivArror.setVisibility(View.GONE);
                progressBar.setVisibility(View.VISIBLE);
                if (onRefreshingListener != null) {
                    onRefreshingListener.onRefresh();
                }

            }
            break;

        default:
            break;
        }
        return super.onTouchEvent(ev);
    }

    interface OnRefreshingListener {
        public void onRefresh();
    }

    public void completeRefresh() {
        // TODO Auto-generated method stub
        viewHead.setPadding(0, -viewHeight, 0, 0);
        this.currentState = DONE;
    }
}

java activity;代码

package com.example.customview1406_mylistview;

import java.util.ArrayList;

import com.example.customview1406_mylistview.MyListView.OnRefreshingListener;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
    MyListView myListView;
    MyListViewAdapter myListViewAdapter;
    ArrayList<String> list = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myListView = (MyListView) findViewById(R.id.myListView);
        list.add("java");
        list.add("android");
        myListViewAdapter = new MyListViewAdapter(this, list);
        myListView.setAdapter(myListViewAdapter);

        myListView.setOnRefreshingListener(new OnRefreshingListener() {

            @Override
            public void onRefresh() {
                new Thread() {
                    public void run() {
                        try {
                            this.sleep(2000);
                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    try {
                                        list.add("联网得到的数据");
                                        myListViewAdapter
                                        .notifyDataSetChanged();
                                        myListView.completeRefresh();
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                }
                            });
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    };
                }.start();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}



0 0
原创粉丝点击