ListView下拉刷新
1.自定义ListView类
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
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 {
final int DOWN = 0;
final int RELEASE = 1;
final int REFREASH = 2;
private View view;
private ImageView iv;
private TextView tv;
private ProgressBar pb;
int downY,moveY,now = DOWN,height;
OnCallBack onCallBack;
public void setOnCallBack(OnCallBack onCallBack) {
this.onCallBack = onCallBack;
}
public interface OnCallBack{
void callback();
}
public MyListview(Context context) {
super(context);
init();
}
public MyListview(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyListview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
view = LayoutInflater.from(getContext()).inflate(R.layout.fr_3_header,null);
iv = view.findViewById(R.id.fr_3_header_iv);
pb = view.findViewById(R.id.fr_3_header_pb);
tv = view.findViewById(R.id.fr_3_header_tv);
view.measure(0,0);
height = view.getMeasuredHeight();
view.setPadding(0,-height,0,0);
addHeaderView(view);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
downY = (int) ev.getY();
break;
case MotionEvent.ACTION_MOVE:
moveY = (int) ev.getY();
int number = moveY - downY;
if(number >0 && getFirstVisiblePosition() == 0 && now != REFREASH){
int padding = number - height;
if(padding<50){
now = DOWN;
tv.setText("下拉刷新");
iv.setImageResource(R.mipmap.pull);
}else{
now = RELEASE;
tv.setText("松手刷新");
iv.setImageResource(R.mipmap.push);
}
view.setPadding(0,padding,0,0);
}
break;
case MotionEvent.ACTION_UP:
if(now == RELEASE){
now = REFREASH;
iv.setVisibility(GONE);
pb.setVisibility(VISIBLE);
tv.setText("正在刷新");
view.setPadding(0,0,0,0);
if(onCallBack != null) onCallBack.callback();
}
break;
}
return super.onTouchEvent(ev);
}
public void finish(){
now = DOWN;
tv.setText("刷新成功");
iv.setImageResource(R.mipmap.ok);
iv.setVisibility(VISIBLE);
pb.setVisibility(GONE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
iv.setImageResource(R.mipmap.push);
tv.setText("下拉刷新");
view.setPadding(0,-height,0,0);
}
},1000);
}
}
2.ListView头部隐藏文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:id="@+id/fr_3_header_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pull"
/>
<ProgressBar
android:id="@+id/fr_3_header_pb"
android:layout_width="32dp"
android:layout_height="32dp"
android:visibility="gone"
/>
<TextView
android:id="@+id/fr_3_header_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下拉刷新"
/>
</LinearLayout>
3.引用自定义ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.jnjs_10_26.MyListview
android:id="@+id/fr_3_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
6.Java文件调用
package com.example.jnjs_10_26;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import java.util.ArrayList;
import java.util.List;
public class Fragment_51 extends Fragment {
Context context;
private MyListview fr_3_lv;
private List<String> list;
public Fragment_51(Context context) {
this.context = context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_51, container, false);
ViewHolder(view);
return view;
}
public void ViewHolder(View rootView) {
this.fr_3_lv = (MyListview) rootView.findViewById(R.id.fr_3_lv);
getData();
}
private void getData() {
list=new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i+"");
}
fr_3_lv.setAdapter(new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,list));
fr_3_lv.setOnCallBack(new MyListview.OnCallBack() {
@Override
public void callback() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
handler.sendEmptyMessage(0x001);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
fr_3_lv.finish();
}
};
}