1. 程式人生 > >XListView+工具類+介面回撥+獲取資料

XListView+工具類+介面回撥+獲取資料

//MainActivity

public class MainActivity extends FragmentActivity {
    private ViewPager viewPager;
    private List<Fragment> list;
    private RadioGroup radioGroup;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //載入資源ID
        viewPager = findViewById(R.id.view);
        radioGroup = findViewById(R.id.group);
        //例項化載入
       list = new ArrayList<Fragment>();
       list.add(new Fragmentone());
       list.add(new Fragmenttwo());
       list.add(new Fragmentthree());

       //介面卡
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public int getCount() {
                return list.size();
            }

            @Override
            public Fragment getItem(int i) {
                return list.get(i);
            }
        });

        //設定滑動
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                switch (i){
                    case 0:
                        radioGroup.check(R.id.but1);
                        break;
                    case 1:
                        radioGroup.check(R.id.but2);
                        break;
                    case 2:
                        radioGroup.check(R.id.but3);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

        //設定點選
       radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(RadioGroup group, int checkedId) {
               switch (checkedId){
                   case R.id.but1:
                       viewPager.setCurrentItem(0);
                       break;
                   case R.id.but2:
                       viewPager.setCurrentItem(1);
                       break;
                   case R.id.but3:
                       viewPager.setCurrentItem(2);
                       break;
               }
           }
       });
    }
}

//工具類

package com.example.zktwo.NetUtils;

import android.os.AsyncTask;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class NetUtils {

    private Gson gson;

    //單例
    private static NetUtils instance;

    //建立私有構造
    private  NetUtils(){
        gson = new Gson();
    }
    //提供靜態方法
    public static  NetUtils getInstance(){
        if (instance == null){
            instance = new NetUtils();
        }
        return instance;
    }
    //定義一個介面
    public interface Callbak<T>{
        void onSuccess(T t);
    }
    //提供一個介面
    public void  getRequsert(final String urlStr,final Class clazz,final Callbak callbak){
        new AsyncTask<String,Void,Object>(){

            @Override
            protected Object doInBackground(String... strings) {
                return getRequsert(urlStr,clazz);
            }

            @Override
            protected void onPostExecute(Object a) {
                callbak.onSuccess(a);
            }
        }.execute(urlStr);
    }

    //建立GSon解析的方法
    public <T> T getRequsert(String urlStr,Class clazz){
        return (T) gson.fromJson(getRequsert(urlStr),clazz);
    }

    //建立網路請求的方法
    public String getRequsert(String urlStr){
        String result = "";
        try {
            URL url = new URL(urlStr);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(5000);
            urlConnection.setConnectTimeout(5000);
            urlConnection.setRequestMethod("GET");
            int responseCode = urlConnection.getResponseCode();
            if (responseCode == 200){
                result = stream2String(urlConnection.getInputStream());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    private  String stream2String(InputStream inputStream) throws IOException {
        InputStreamReader is  =new InputStreamReader(inputStream);
        BufferedReader br = new BufferedReader(is);
        StringBuilder sb = new StringBuilder();
        for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()){
            sb.append(tmp);
        }
        return sb.toString();
    }
}

//介面卡

public class NewsAdapter extends BaseAdapter {

    private List<NewsBean.ResultBean> mNews;
    private Context context;

    public NewsAdapter(Context context) {
        this.context = context;
        mNews = new ArrayList<>();
    }
    //下拉
    public void setmNews(List<NewsBean.ResultBean> news) {
        //先清空原來資料
        this.mNews.clear();
        if (news != null){
            mNews.addAll(news);
        }
        //重新整理
        notifyDataSetChanged();
    }
    //下拉
    public void addmNews(List<NewsBean.ResultBean> news){
        if (news != null){
            mNews.addAll(news);
        }
        notifyDataSetChanged();
    }

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

    @Override
    public NewsBean.ResultBean getItem(int position) {
        return mNews.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        NewsViewHolder holder;
        if (convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.news_item,parent,false);
            holder = new NewsViewHolder(convertView);
        }else {
            holder = (NewsViewHolder) convertView.getTag();

        }
        holder.bindData(getItem(position));

        return convertView;
    }
    //建立NEWS的暫存器
    class NewsViewHolder{
        ImageView icon;
        TextView title,summary;
        //獲取資源ID
        public NewsViewHolder(View conviewView){
            icon = conviewView.findViewById(R.id.icon);
            title = conviewView.findViewById(R.id.title);
            summary = conviewView.findViewById(R.id.summary);
            conviewView.setTag(this);
        }
        public void bindData(NewsBean.ResultBean data){
            title.setText(data.getName());
            summary.setText(data.getSummary());

            ImageLoader.getInstance().displayImage(data.getImageUrl(),icon);
        }
    }
}

//APP

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化
        ImageLoader.getInstance().init(
            new ImageLoaderConfiguration.Builder(this)

            .diskCacheSize(50*1024*1024)

            .memoryCacheSizePercentage(13)
            .defaultDisplayImageOptions(
                new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .bitmapConfig(Bitmap.Config.ARGB_4444)
                .showImageOnFail(R.mipmap.ic_launcher)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .showImageOnLoading(R.mipmap.ic_launcher)
                .displayer(new CircleBitmapDisplayer())
                .build()
            )
            .build()
        );
    }
}

//Bean

package com.example.zktwo.Bean;

import java.util.List;

public class NewsBean {
    private String message;
    private String status;
    private List<ResultBean> result;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<ResultBean> getResult() {
        return result;
    }

    public void setResult(List<ResultBean> result) {
        this.result = result;
    }

    public static class ResultBean {

        private boolean followMovie;
        private int id;
        private String imageUrl;
        private String name;
        private int rank;
        private String summary;

        public boolean isFollowMovie() {
            return followMovie;
        }

        public void setFollowMovie(boolean followMovie) {
            this.followMovie = followMovie;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getImageUrl() {
            return imageUrl;
        }

        public void setImageUrl(String imageUrl) {
            this.imageUrl = imageUrl;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getRank() {
            return rank;
        }

        public void setRank(int rank) {
            this.rank = rank;
        }

        public String getSummary() {
            return summary;
        }

        public void setSummary(String summary) {
            this.summary = summary;
        }
    }
}

//Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.zktwo">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:name=".Activity.App"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>