listview的下拉刷新和上滑加载。

listview需要适配器,更改数据之后,在适配器中实现数据的addall操作即可。
下拉刷新:
布局:

<?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.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>
    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

listview适配器:注意addall操作:

public class FruitAdapter extends ArrayAdapter {

    private  int resourceId;
    private final int TYPE_ONE=0,TYPE_TWO=1,TYPE_COUNT=2;

    public FruitAdapter(Context context, int resource) {
        super(context, resource);
        resourceId=resource;
    }
    public void initData(List<Fruit> objects){
        clear();
        addAll(objects);
    }

    @Override
//每个子项被滚动到屏幕内的时候会被调用
    public View getView(int position, View convertView, ViewGroup parent) {

        Fruit fruit= (Fruit) getItem(position);

        int type=getItemViewType(position);
        ViewHolder viewHolder = null;
        ViewHolder2 viewHolder2=null;
        //为空加载布局,不为空重用
        if (convertView==null)
        {
            //加载布局
            convertView= LayoutInflater.from(getContext()).inflate(resourceId, null);
            //convertView为空就创建,不为空调用
            viewHolder=new ViewHolder() ;
            //获取实例
            viewHolder.fruitImage= (ImageView) convertView.findViewById(R.id.fruit_image);
            viewHolder.fruitName= (TextView) convertView.findViewById(R.id.fruit_name);
            //可以使用setTag把查找的view缓存起来方便多次重用
            convertView.setTag(viewHolder);



        }
         else {

            //重新获取viewHolder
            viewHolder= (ViewHolder)convertView.getTag();
        }
        //设置显示的图片和文字
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return  convertView;
    }
    class ViewHolder{
        ImageView fruitImage;
        TextView fruitName;
    }
    class  ViewHolder2{
        TextView textView;
    }
}

fragment:

package com.example.administrator.frag_pager;

/**
 * Created by Administrator on 2016/1/11.
 */
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Fram1 extends Fragment {
    private List fruitList=new ArrayList();
    private FruitAdapter fruitAdapter;
    private SwipeRefreshLayout swipeRefreshLayout;
    private ListView listView;
    public static final int SHOW_RESPONSE=0;
    private Handler handler=new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
                    String response=(String) msg.obj;
                   JSONwithJSONObject(response);
        }

    };
    private  void JSONwithJSONObject(String jsonData)
    {
        try {
            JSONArray jsonArray=new JSONArray(jsonData);
            for (int i=0;i<jsonArray.length();i++)
            {
                JSONObject jsonObject=jsonArray.getJSONObject(i);
                String name=jsonObject.getString("id");
                String  imageId=jsonObject.getString("version");
                // responseText.setText(id);
                int num=jsonObject.getInt("id");
                Log.d("HAHA", name);
                Log.d("HAHA", String.valueOf(num));
                Fruit fruit=new Fruit(name,Integer.parseInt(imageId));
               // fruitList.addAll(0, new initfruit().initFruits(num));
                fruitList.addAll(0, new initfruit().initFruits(num));
                swipeRefreshLayout.setRefreshing(false);
                fruitAdapter.initData(fruitList);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
//      System.out.println("OneFragment  onCreate");
        super.onCreate(savedInstanceState);


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
//      System.out.println("OneFragment  onCreateView");
        View view=inflater.inflate(R.layout.lay1, container, false);
        listView= (ListView) view.findViewById(R.id.list_view);
        swipeRefreshLayout= (SwipeRefreshLayout) view.findViewById(R.id.swipeRefreshLayout);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                swipeRefreshLayout.setRefreshing(true);
                Toast.makeText(getActivity(), "haha", Toast.LENGTH_SHORT).show();
                sendRequestWithHttpURLConnection("http://192.168.2.190:8080/json_test");
                fruitList.addAll(0, new initfruit().initFruits(0));
                swipeRefreshLayout.setRefreshing(false);
                fruitAdapter.initData(fruitList);
            }
        });
        swipeRefreshLayout.setColorScheme(new int[]{android.R.color.holo_blue_dark, android.R.color.holo_orange_light, android.R.color.holo_red_light});
        fruitList.addAll(new initfruit().getFruit());
        fruitList.addAll(new initfruit().initFruits(0));
        fruitAdapter=new FruitAdapter(getActivity(),R.layout.fruit_item);
        listView.setAdapter(fruitAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Fruit fruit = (Fruit) fruitList.get(position);
                String s = Integer.toString(position);
                Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show();
            }
        });

        fruitAdapter.initData(fruitList);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }


    private void sendRequestWithHttpURLConnection( final String str){
        //开启线程来发起网络请求
        new Thread(new Runnable(){

            @Override
            public void run() {
                // TODO Auto-generated method stub
                HttpURLConnection connection=null;

                try {
                    URL url=new URL(str);
                    connection =(HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    InputStream in=connection.getInputStream();
                    //下面对获取到的输入流进行读取
                    BufferedReader reader=new BufferedReader(new InputStreamReader(in));
                    StringBuilder response=new StringBuilder();
                    String line;
                    while((line=reader.readLine())!=null){
                        response.append(line);
                    }
                    Message message=new Message();
                    message.what=SHOW_RESPONSE;
                    message.obj=response.toString();
                    handler.sendMessage(message);


                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(Exception e){
                    e.printStackTrace();
                }finally{
                    if(connection!=null){
                        connection.disconnect();
                    }
                }
            }

        }).start();


    }

}

这里我用本地服务器写了一个json文件,并对它进行了解析,刷新用了handle操作实现,获取数据完毕后addall。

  public void initData(List<Fruit> objects){
        clear();
        addAll(objects);
    }
public class Fruit {
    private String name;
    private int  imageId;
    public Fruit(String name, int imageId)
    {
        this.name=name;
        this.imageId=imageId;
    }
    public String getName(){
        return  name;
    }
    public int  getImageId(){
        return  imageId;
    }
}

以上就是下拉操作的实现,下面是上滑加载,当快加载到末端时自动加载。

public class TypeFragment extends Fragment implements AbsListView.OnScrollListener {

//    ArrayList<String> listString=new ArrayList();
    ArrayList<com.youloft.news.dao.Item> Item=new ArrayList();
//    ArrayList<NewsItem>lnewsItem=new ArrayList();
    ListView listView;
    String id;
    SwipeRefreshLayout swipeRefreshLayout;
    private int lastVisibleIndex;
    String type;
    String s;
    private int page=0;
    ItemAdapter itemAdapter=null;
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            String response=(String) msg.obj;
            JSONwithJSONObject(response);
            listView.setSelection(lastVisibleIndex);
            // list.add(map);

        }
    };
    private void JSONwithJSONObject(String  jsonData) {
        try {
            JSONArray jsonArray=new JSONArray(jsonData);
            List<NewsItem> data=new ArrayList<>();
            for (int i=0;i<jsonArray.length();i++)
            {
                JSONObject jsonObject=jsonArray.getJSONObject(i);
                String id =jsonObject.getString("id");
                String title =jsonObject.getString("title");
                NewsItem newsItem=new NewsItem(title,id);

                data.add(newsItem);
//                listString.add(title);
               // Log.d("HHHLK", Integer.toString(i));
            }
           // ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),
                  //  R.layout.new_item,R.id.nItem,listString);
            itemAdapter.buildData(data);
            //itemAdapter.initData(lnewsItem);
            swipeRefreshLayout.setRefreshing(false);
         //   listView.setAdapter(arrayAdapter);
        }
        catch (Exception e){
            e.printStackTrace();
        }

    }
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle bundle = this.getArguments();
        if(bundle != null){
            type = bundle.getString("id");

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater,  ViewGroup container,Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.frag_type, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
    }
    public void initView(){
        listView= (ListView) getView().findViewById(R.id.list_view);
        swipeRefreshLayout= (SwipeRefreshLayout) getView().findViewById(R.id.knowswipeRefreshLayout);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Log.d("OO", "D");
                sendRequestWithHttpURLConnection("http://192.168.2.178:84/api/NewsList/GetTitle?typeId=" + type + "&page=0");
            }
        });
        itemAdapter=new ItemAdapter(getActivity(),R.layout.new_item);
        listView.setAdapter(itemAdapter);
        listView.setOnScrollListener(this);
        sendRequestWithHttpURLConnection("http://192.168.2.178:84/api/NewsList/GetTitle?typeId=" + type + "&page=0");
    }

    private void sendRequestWithHttpURLConnection(final String str) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try {
                    URL url = new URL(str);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    InputStream in = connection.getInputStream();
                    ;
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    Message message = new Message();
                    message.obj = response.toString();
                    handler.sendMessage(message);
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }
public static TypeFragment newInstance(String Type)
{
    Bundle bundle=new Bundle();
    bundle.putSerializable("id",  Type);
    TypeFragment fragment=new TypeFragment();
    fragment.setArguments(bundle);
    return fragment;
}

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (lastVisibleIndex>itemAdapter.getCount()-10){
                page++;
                Log.d("OO","D");
                sendRequestWithHttpURLConnection("http://192.168.2.178:84/api/NewsList/GetTitle?typeId=" + type + "&page="+page);
                Log.d("OO","DD");
            }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
       lastVisibleIndex= listView.getLastVisiblePosition();
        Log.d("OO","DDD");
    }
}

该碎片继承了AbsListView.OnScrollListener接口,并在快到末端时实现加载操作。
xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       >
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/knowswipeRefreshLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <ListView
                android:id="@+id/list_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"></ListView>
        </android.support.v4.widget.SwipeRefreshLayout>
    </LinearLayout>

</RelativeLayout>

适配器如下:

package com.youloft.news.utils;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.youloft.news.R;
import com.youloft.news.activity.ContentActivity;
import com.youloft.news.dao.Item;
import com.youloft.news.dao.NewsItem;

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

/**
 * Created by Administrator on 2016/3/15.
 */
public class ItemAdapter extends ArrayAdapter {

    private  int resourceId;
    Context context=null;
List<NewsItem> mData=new ArrayList<>();
    public  ItemAdapter(Context context, int resource) {
        super(context, resource);
        resourceId=resource;
        this.context=context;
    }
//    public void initData(ArrayList<NewsItem> objects){
//        clear();
//        addAll(objects);
//    }
    public void buildData(List<NewsItem> data){
        addAll(data);
    }

    @Override
//每个子项被滚动到屏幕内的时候会被调用
    public View getView(int position, View convertView, ViewGroup parent) {

        NewsItem onenew= (NewsItem) getItem(position);
//        int type=getItemViewType(position);
        ViewHolder viewHolder = null;
        //为空加载布局,不为空重用
        if (convertView==null)
        {
            //加载布局
            convertView= LayoutInflater.from(getContext()).inflate(resourceId, null);
            //convertView为空就创建,不为空调用
            viewHolder=new ViewHolder(convertView) ;
            //获取实例
          //  viewHolder.fruitImage= (ImageView) convertView.findViewById(R.id.fruit_image);
//            viewHolder.newName= (TextView) convertView.findViewById(R.id.nItem);
            //可以使用setTag把查找的view缓存起来方便多次重用
            convertView.setTag(viewHolder);
        }
        else {

            //重新获取viewHolder
            viewHolder= (ViewHolder)convertView.getTag();
        }
        //设置显示的图片和文字
   //     viewHolder.fruitImage.setImageResource(fruit.getImageId());
//        viewHolder.newName.setText(onenew.getNewsTitle());
        viewHolder.bulid(onenew);
        return  convertView;

    }
    class ViewHolder{
     //   ImageView fruitImage;
        TextView newName;
        NewsItem model=null;
        public ViewHolder(View v){
            newName=(TextView)v.findViewById(R.id.nItem);
        }
        public void bulid(NewsItem item){
            this.model=item;
            newName.setText(item.getNewsTitle());
            newName.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ContentActivity.actionStart(context, model.getTypeId());
                }
            });
        }
    }

}

public class NewsItem {
String title;
String id;
public NewsItem(String title,String id)
{
this.title=title;
this.id=id;
}
public String getNewsTitle()
{
return title;
}
public String getTypeId()
{
return id;
}
}
news为实习时做一个新闻客户端实现的,上滑显示最新消息,当上拉到底部时,就加载历史记录并展示,json数据解析我用了官方的jsonobject,还有其它解析方式,相对来说更简单。
总结:总的来说就是一个对控件的监听然后实现响应组件的数据更新并更新UI

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值