高级控件之下拉刷新

下拉刷新可以用ListView实现

主要代码如下:


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.jane0611_test.MainActivity">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lv_main_list"></ListView>

</android.support.constraint.ConstraintLayout>

<?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="match_parent"
    android:descendantFocusability="blocksDescendants">
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/iv_item_listview_icon"
        android:src="@drawable/dog"/>
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/tv_item_listview_title"
        android:text="默认文字"
        android:textSize="30sp"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载"
        android:id="@+id/btn_item_listview_download"/>
</LinearLayout>

以上是界面代码,高级控件之下拉刷新

package com.example.jane0611_test;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Administrator on 2017/6/11 0011.
 */

public class ItemTag {
    public ImageView iamgeView;
    public TextView textView;
    public Button button;
}

package com.example.jane0611_test;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.example.jane0611_test.R.id.iv_item_listview_icon;

public class MainActivity extends AppCompatActivity {

    private ListView lv_main_list;
    private int images[]={R.drawable.bird,R.drawable.dragon,R.drawable.cat,R.drawable.elephant,R.drawable.fish};
    private String titles[]={"大大","小小","一一","二二" ,"三三"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv_main_list = (ListView) findViewById(R.id.lv_main_list);

//        List<Map<String,Object>> list=new ArrayList<>();
//        for (int i = 0; i < images.length; i++) {
//            Map<String,Object> map=new HashMap<>();
//            map.put("image",images[i]);
//            map.put("title",titles[i]);
//            list.add(map);
//        }
//        实例化SimpleAdapter
//        SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.item_listview,new String[]{"image","title"},new int[]{R.id.iv_item_listview_icon,R.id.tv_item_listview_title});
        lv_main_list.setAdapter(new MyAdapter());
    //给ListView设置点击事件
        lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "跳转到"+titles[position%titles.length], Toast.LENGTH_SHORT).show();
            }
        });
    }
    //OOM OutOfMemory内存溢出
    class MyAdapter extends BaseAdapter{
//指定listview有多少行数据
        @Override
        public int getCount() {
            return 10000;
        }
//点击获取这一行的内容
        @Override
        public Object getItem(int position) {
            return titles[position%titles.length];
        }
//返回每一行的下标
        @Override
        public long getItemId(int position) {
            return position;
        }
//会拿到每一行的视图,有多少行数据就调多少次
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
           //把布局文件转成View
            if(convertView==null){
                convertView=getLayoutInflater().inflate(R.layout.item_listview,null);
                ItemTag itemTag=new ItemTag();
                itemTag.iamgeView= (ImageView) convertView.findViewById(iv_item_listview_icon);
                itemTag.textView= (TextView) convertView.findViewById(R.id.tv_item_listview_title);
                itemTag.button= (Button) convertView.findViewById(R.id.btn_item_listview_download);
                convertView.setTag(itemTag);
            }
            ItemTag itemTag= (ItemTag) convertView.getTag();
            //设值
            itemTag.iamgeView.setImageResource(images[position%titles.length]);
            itemTag.textView.setText(titles[position%titles.length]);
            //给按钮设置点击事件
            itemTag.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "正在下载"+titles[position%titles.length], Toast.LENGTH_SHORT).show();
                }
            });
            return convertView;
        }
    }
}

package com.example.jane0611_test;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/6/12 0012.
 */

public class PullToRefreshActivity extends AppCompatActivity {

    private PullToRefreshListView ptrlv_refresh;
    private List<String> list=new ArrayList<>();
    private ArrayAdapter adapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pulltorefresh);
        ptrlv_refresh = (PullToRefreshListView) findViewById(R.id.ptrlv_refresh);
        for (int i = 0; i < 10; i++) {
            list.add("数据"+i);
        }
        adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
        ptrlv_refresh.setAdapter(adapter);
//   给listView设置下拉刷新的监听
        ptrlv_refresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                new MyTask().execute();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

            }
        });
    }
    class MyTask extends AsyncTask{
//在后台获取数据
        //内部有线程机制
        @Override
        protected Object doInBackground(Object[] params) {
            for (int i = 0; i < 3; i++) {
                list.add("加上数据"+i);
            }
            return null;
        }
//更新UI
        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);

            ptrlv_refresh.onRefreshComplete();
            //通知适配器数据,发生改变
            adapter.notifyDataSetChanged();
        }
    }
}

以上是效果图