PullToRefreshListView刷新

需要导入的依赖:

implementation 'com.google.code.gson:gson:2.2.4'

implementation 'com.google.guava:guava:16.0.1'

需要导入的包文件

implementation project(':pullToRefresh')

implementation project(':imageloaderlibrary')

此项目需要 两个adapter,一个app,一个bean,一个net,两个fragment

net:

package com.example.administrator.three.net;

import android.os.AsyncTask;

import com.google.common.io.CharStreams;

import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class NetUtils {
    private static final NetUtils ourInstance = new NetUtils();

    public static NetUtils getInstance() {
        return ourInstance;
    }

    private NetUtils() {
    }
    private Callback callback;

    public void setCallback(Callback callback) {
        this.callback = callback;
    }

    public void getData(String url, Callback callback){
        new FuLiUtils(callback).execute(url);
    }
    public void GetData(String url){
        new FuLiUtils().execute(url);
    }
    public interface Callback{
        void Call(String result);
    }
    public class FuLiUtils extends AsyncTask<String,Void,String>{

        private Callback callback;

        public FuLiUtils(Callback callback) {
            this.callback = callback;
        }

        public FuLiUtils() {
        }

        @Override
        protected String doInBackground(String... strings) {
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){
                    return CharStreams.toString(new InputStreamReader(connection.getInputStream(),"UTF-8"));
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            if(callback != null){
                callback.Call(s);
            }
        }
    }
}
 

app:

package com.example.administrator.three.app;

import android.app.Application;

import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = ImageLoaderUtils.getConfiguration(this);
        ImageLoader.getInstance().init(configuration);
    }
}
 

1,首页布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/drawer"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@drawable/ic_launcher_background"
            android:orientation="horizontal">
            <ImageView
                android:id="@+id/ima_view"
                android:layout_width="70dp"
                android:layout_height="70dp"/>
            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
        </LinearLayout>
        <FrameLayout
            android:id="@+id/frag_ment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="8">

        </FrameLayout>
        <RadioGroup
            android:id="@+id/radio_group"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <RadioButton
                android:id="@+id/rb1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:button="@null"
                android:text="刷新"
                android:textSize="20sp"
                android:gravity="center"/>
            <RadioButton
                android:id="@+id/rb2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:button="@null"
                android:text="我的"
                android:textSize="20sp"
                android:gravity="center"/>
        </RadioGroup>
    </LinearLayout>
    <LinearLayout
        android:layout_gravity="start"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#ccc">
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

2,初始化控件以及操作

package com.example.administrator.three;

import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RadioGroup;

import com.example.administrator.three.Fragment.OneFragment;
import com.example.administrator.three.Fragment.TwoFragment;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

public class MainActivity extends AppCompatActivity {

    private ImageView ima_view;
    private FrameLayout frag_ment;
    private RadioGroup radio_group;
    private DrawerLayout drawer;
    private OneFragment oneFragment;
    private TwoFragment twoFragment;
    private FragmentManager manager;
    private PullToRefreshListView pull_to;
    private String url = "http://www.xieast.com/api/news/news.php?page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ima_view = findViewById(R.id.ima_view);
        frag_ment = findViewById(R.id.frag_ment);
        radio_group = findViewById(R.id.radio_group);
        drawer = findViewById(R.id.drawer);
        image();
        drawer();
        radio();
    }
    private void radio() {
        manager = getSupportFragmentManager();

        oneFragment = new OneFragment();
        twoFragment = new TwoFragment();

        manager.beginTransaction().replace(R.id.frag_ment,oneFragment).commit();
        radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                FragmentTransaction transaction = manager.beginTransaction();
                switch (i){
                    case R.id.rb1:
                        transaction.replace(R.id.frag_ment,oneFragment);
                        break;
                    case R.id.rb2:
                        transaction.replace(R.id.frag_ment,twoFragment);
                        break;
                }
                transaction.commit();
            }
        });
    }

    private void image() {
        ima_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (drawer.isDrawerOpen(Gravity.START)){
                    drawer.closeDrawer(Gravity.START);
                }else {
                    drawer.openDrawer(Gravity.START);
                }
            }
        });
    }

    private void drawer() {
        drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
                View childAt = drawer.getChildAt(0);
                View ms = drawer;
                float mm = 1 - slideOffset;
                childAt.setTranslationX(ms.getMeasuredWidth()*(1 - mm));
            }

            @Override
            public void onDrawerOpened(@NonNull View drawerView) {

            }

            @Override
            public void onDrawerClosed(@NonNull View drawerView) {

            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });
    }
}
3,第一个页面的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
4,第一个页面的操作部分:

package com.example.administrator.three.Fragment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;

import com.example.administrator.three.Bean.bean;
import com.example.administrator.three.R;
import com.example.administrator.three.adapter.LAdapter;
import com.example.administrator.three.adapter.LunAdapter;
import com.example.administrator.three.net.NetUtils;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;

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

public class OneFragment extends Fragment implements NetUtils.Callback {

    private LunAdapter lunAdapter;
    private List<bean.DataBean> data;
    private bean bean;
    private List<ImageView> list = new ArrayList<>();
    private ViewPager vp;
    private PullToRefreshListView list_view;
    private String url = "http://www.xieast.com/api/news/news.php?page=";
    private int page = 1;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0){
                int currentItem = vp.getCurrentItem();
                currentItem++;
                vp.setCurrentItem(currentItem);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };
    private NetUtils instance;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.one_layout, container, false);
        vp = view.findViewById(R.id.vp);
        list_view = view.findViewById(R.id.list_view);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        instance = NetUtils.getInstance();
        instance.getData(url,this);

        list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                page = 1;
                instance.getData(url + page, OneFragment.this);
                vp.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        list_view.onRefreshComplete();
                    }
                },1000);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                page ++;
                instance.getData(url + page, OneFragment.this);
                vp.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        list_view.onRefreshComplete();
                    }
                },1000);
            }
        });
    }

    @Override
    public void Call(String result) {
            Gson gson = new Gson();
            bean = gson.fromJson(result, bean.class);
            data = bean.getData();
            LAdapter lAdapter = new LAdapter(data, getActivity());
            list_view.setAdapter(lAdapter);
            for (int i = 0 ; i < bean.getData().size() ; i ++ ){
                ImageView imageView = new ImageView(getActivity());
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),imageView);
                list.add(imageView);
            }
            lunAdapter = new LunAdapter(list, getActivity());
            vp.setAdapter(lunAdapter);
            handler.sendEmptyMessageDelayed(0,2000);
        }
}
注意第二个fragment没有数据,写不写都可以。

5,需要用到的Adapter

05-1:PullToRefreshListView展示数据时用到的Adapter:

<

package com.example.administrator.three.adapter;

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

import com.example.administrator.three.Bean.bean;
import com.example.administrator.three.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

public class LAdapter extends BaseAdapter {
    private List<bean.DataBean> data;
    private Context context;

    public LAdapter(List<bean.DataBean> data, Context context) {
        this.data = data;
        this.context = context;
    }


    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View convertview, ViewGroup viewGroup) {
        ViewHolder holder = null;
        if (convertview == null){
            convertview = View.inflate(context, R.layout.buju_layout,null);
            holder = new ViewHolder();
            holder.text = convertview.findViewById(R.id.text_bu_view);
            holder.image1 = convertview.findViewById(R.id.ima1);
            holder.image2 = convertview.findViewById(R.id.ima2);
            holder.image3 = convertview.findViewById(R.id.ima3);
            convertview.setTag(holder);
        }else{
            holder = (ViewHolder) convertview.getTag();
        }
        holder.text.setText(data.get(i).getTitle());
        ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder.image1);
        ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s02(),holder.image2);
        ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s03(),holder.image3);
        return convertview;
    }
    class  ViewHolder{
        TextView text;
        ImageView image1,image2,image3;
    }
}

5-1-1:PullToRefreshListView用到的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/text_bu_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="xxxx"
        android:textSize="20sp"
        android:gravity="center"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageView
            android:id="@+id/ima1"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher_background"/>
        <ImageView
            android:id="@+id/ima2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher_background"/>
        <ImageView
            android:id="@+id/ima3"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher_background"/>
    </LinearLayout>
</LinearLayout>

5-2:ViewPager:轮播图片时用到的Adapter:

package com.example.administrator.three.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.List;

public class LunAdapter extends PagerAdapter {
    private List<ImageView> list;
    private Context context;

    public LunAdapter(List<ImageView> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = list.get(position % list.size());
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View)object);
    }
}
 

猜你喜欢

转载自blog.csdn.net/p_19971113/article/details/81841193