天天看點

PullToRefreshListView今日頭條初始頁面

PullToRefreshListView今日頭條初始頁面

權限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
           

//其餘事項

 library,Imager_Loader,Gson

<RelativeLayout
    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.fxf.lianshou.MainActivity">
    <HorizontalScrollView
        android:id="@+id/hs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/linearlayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"></LinearLayout>
    </HorizontalScrollView>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/hs"/>

</RelativeLayout>
           

ff.xml         相當于fragment01

<com.handmark.pulltorefresh.library.PullToRefreshListView
        android:layout_width="match_parent"
        android:id="@+id/pulltorefresh"
        android:layout_height="match_parent">

    </com.handmark.pulltorefresh.library.PullToRefreshListView>
           

layout.xml       相當于fragment02

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="123456789"/>

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher"
        />
           

BaseAppication.java

import android.app.Application;

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
    }
}
           

App.java             需要在權限中:

<application
    android:name=".App"      
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

public class App  extends BaseApplication{

    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration
                .Builder(this)
                // max width, max height,即儲存的每個緩存檔案的最大長寬
                .memoryCacheExtraOptions(480, 800)
                //線程池内加載的數量
                .threadPoolSize(5)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                // You can pass your own memory cache implementation/你可以通過自己的記憶體緩存實作
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
                .memoryCacheSize(2 * 1024 * 1024)
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                // connectTimeout (5 s), readTimeout (30 s)逾時時間
                .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
                // Remove for release app
                .writeDebugLogs()
                //開始建構
                .build();
        //初始化imageloader;
        ImageLoader.getInstance().init(config);
    }


}
           

Bean.java         //解析Gson     通過Gson包自己解析

import java.util.List;


public class Bean {
    private boolean error;
    private List<ResultsBean> results;

    public boolean isError() {
        return error;
    }

    public void setError(boolean error) {
        this.error = error;
    }

    public List<ResultsBean> getResults() {
        return results;
    }

    public void setResults(List<ResultsBean> results) {
        this.results = results;
    }

    public static class ResultsBean {

        private String _id;
        private String createdAt;
        private String desc;
        private String publishedAt;
        private String source;
        private String type;
        private String url;
        private boolean used;
        private String who;
        private List<String> images;

        public String get_id() {
            return _id;
        }

        public void set_id(String _id) {
            this._id = _id;
        }

        public String getCreatedAt() {
            return createdAt;
        }

        public void setCreatedAt(String createdAt) {
            this.createdAt = createdAt;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        public String getPublishedAt() {
            return publishedAt;
        }

        public void setPublishedAt(String publishedAt) {
            this.publishedAt = publishedAt;
        }

        public String getSource() {
            return source;
        }

        public void setSource(String source) {
            this.source = source;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public boolean isUsed() {
            return used;
        }

        public void setUsed(boolean used) {
            this.used = used;
        }

        public String getWho() {
            return who;
        }

        public void setWho(String who) {
            this.who = who;
        }

        public List<String> getImages() {
            return images;
        }

        public void setImages(List<String> images) {
            this.images = images;
        }
    }
}
           

Fragment1.java

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;



public class Fragment1 extends Fragment{
    String TAG = "fxf";
    private String url;
    private int page = 1;

    public static Fragment1 getins(String title){
        Fragment1 fragment1 = new Fragment1();
        Bundle bundle = new Bundle();
        bundle.putString("title",title);
        fragment1.setArguments(bundle);
        return fragment1;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Bundle arguments = getArguments();
        //得到url
        //http://gank.io/api/data/Android/10/1
        url = arguments.getString("title")+page;
        Log.e(TAG, "傳遞過來的url "+ url);

        TextView textView = new TextView(getActivity());
        textView.setText(url);
        return textView;
    }

    @Override
    public void onResume() {
        super.onResume();
        getNetData( 1);

    }
    //根據url擷取網絡資料; 解析給Listview,加上PullToRefresh;
    private void getNetData(int page) {
        // NetWorkUtil.getNetString();


    }


    /**
     * 下啦,
     *  把集合清空,重新加載資料;
     */


    /**
     * 上啦,
     *      page++;
     *      getNetData(page)
     *      list.addall();
     *      adapter.setDataNotifyChanged();
     *
     */


}
           

NetWorkUtil.java

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

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;

public class NetWorkUtil {
    private int responseCode;

    /**
     * 擷取圖檔并傳回;
     * @param urlString
     * @return
     */
    public Bitmap getNetImage(String urlString){
        try {
            //得到URL對象,這個對象可以打開連接配接
            URL url = new URL(urlString);
            //打開連接配接,HttpURLConnection:是URLConnection的子類;子類的方法比較多;都用子類
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            //伺服器傳回的狀态碼

            int responseCode = urlConnection.getResponseCode();
            //請求成功
            if (responseCode == 200){
                InputStream inputStream = urlConnection.getInputStream();
                //BitmapFactory類封裝了好多關于圖檔處理的方法;
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return  bitmap;

            }else {
                Log.e("wzq請求圖檔","responseCode:"+ responseCode);
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

    /**
     * 請求json字元串,
     * @param urlString url
     * @return   json字元串
     */
    public static String getNetString(String urlString){

        try {
            //得到URL對象,這個對象可以打開連接配接
            URL url = new URL(urlString);
            //打開連接配接,HttpURLConnection:是URLConnection的子類;子類的方法比較多;都用子類
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            //伺服器傳回的狀态碼

            int responseCode = urlConnection.getResponseCode();
            //請求成功
            if (responseCode == 200){
                InputStream inputStream = urlConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder stringBuilder = new StringBuilder();
                String stringTemp = "";
                while ((stringTemp = bufferedReader.readLine()) != null) {
                    stringBuilder.append(stringTemp);
                }
                String result = stringBuilder.toString();
                Log.e("wzq請求json", "result:" + result);
                return result;
            }else {
                Log.e("wzq","responseCode:"+ responseCode);
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

}
           

MainActivity.java

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    String baseUrl = "http://gank.io/api/data/";
    String[] titles = new String[]{"福利", "Android", "iOS", "休息視訊", "拓展資源", "前端", "all"};
    private HorizontalScrollView hs;
    private LinearLayout linearlayout;
    private ViewPager viewpager;
    private ArrayList<TextView> textViewList;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String result = (String) msg.obj;
            parseData(result);

        }
    };

    private void parseData(String result) {
        //Log.d("TAG",""+s);
        Gson gson = new Gson();
        Bean bean = gson.fromJson(result, Bean.class);
        List<Bean.ResultsBean> results = bean.getResults();
        textViewList = new ArrayList<TextView>();
        for (int i = 0; i < results.size(); i++) {
            final TextView textView = new TextView(MainActivity.this);
            textView.setText(results.get(i).getType() + i);
            textView.setTextSize(20);
            textView.setId(i + 1000);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int id = view.getId();
                    viewpager.setCurrentItem(id - 1000);
                }
            });
            if (i == 0) {
                textView.setTextColor(Color.RED);
            } else {
                textView.setTextColor(Color.BLACK);
            }
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(20, 10, 20, 10);
            //添加到布局中
            linearlayout.addView(textView, layoutParams);

            //添加到集合
            textViewList.add(textView);
            viewpager.setAdapter(new MAdapter(getSupportFragmentManager()));
            viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    for (int i = 0; i < textViewList.size(); i++) {
                        if (position == i) {
                            textViewList.get(i).setTextColor(Color.RED);
                        } else {
                            textViewList.get(i).setTextColor(Color.BLACK);
                        }
                        //擷取目前的textview
                        TextView textView = textViewList.get(position);
                        //width是每次滑動的距離
                        int width = textView.getWidth();
                        //讓scrollView滑動   滑動距離是textview之間的間距
                        hs.scrollTo(width * position, 0);
                    }
                }

                @Override
                public void onPageSelected(int position) {

                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }


    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hs = (HorizontalScrollView) findViewById(R.id.hs);
        linearlayout = (LinearLayout) findViewById(R.id.linearlayout);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        new Thread() {

            @Override
            public void run() {
                super.run();
                String result = NetWorkUtil.getNetString("http://gank.io/api/data/Android/10/1");
                Message message = handler.obtainMessage();
                message.obj = result;
                handler.sendMessage(message);
            }
        }.start();
    }

    class MAdapter extends FragmentPagerAdapter {

        public MAdapter(FragmentManager fm) {
            super(fm);
        }

        /*
         *  如何向Fragment中傳遞url,
         *
         */
        @Override
        public Fragment getItem(int position) {

            送出的資料需要進行URL編碼,字母和數字編碼後都不變
//            String path = "http://192.168.252.1:8080/web/LoginServlet?name="+ URLEncoder.encode(name)+"&password="+pass;
            return Fragment1.getins(baseUrl + titles[position] + "/10/1");
        }

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

    }

}