**
先倒依赖:image-loader, gson, library
配置权限:网络权限 读写权限 重点:App
**
Activity

public class MainActivity extends AppCompatActivity {

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                   pager.setCurrentItem(0);
                    return true;
                case R.id.navigation_news:
                    pager.setCurrentItem(1);
                    return true;
                case R.id.navigation_mine:
                    pager.setCurrentItem(2);
                    return true;
            }
            return false;
        }
    };
    private ViewPager pager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = findViewById(R.id.pager);
        final BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

        pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int i) {
                switch (i){
                    case 0:
                        return new HomeFragment();
                    case 1:
                        return new NewsFragment();
                    case 2:
                        return new MineFragment();
                }
                return null;
            }

            @Override
            public int getCount() {
                return 3;
            }
        });

        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }
//页面滑动
            @Override
            public void onPageSelected(int i) {
                switch (i) {
                    case 0:
                        navigation.setSelectedItemId(R.id.navigation_home);
                        break;
                    case 1:
                        navigation.setSelectedItemId(R.id.navigation_news);
                        break;
                    case 2:
                        navigation.setSelectedItemId(R.id.navigation_mine);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int i) {
            }
        });
    }
}

抽取工具类

public class NetUtil {
    private static NetUtil instance;

    public NetUtil(){ }

    public static NetUtil getInstance(){
        if (instance==null){
            instance=new NetUtil();
        }
        return instance;
    }
    //1.创建接口
    public static interface CallBack<T>{
        void onSuccess(T t);
    }
    //2.网络接口
    public static String RequestData(String str){
        String result=\"\";
        try {
            URL url=new URL(str);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod(\"GET\");
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            int responseCode = urlConnection.getResponseCode();
            if (responseCode==200){
                result=stream2String(urlConnection.getInputStream());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    //3.字节流
    private static String stream2String(InputStream inputStream) throws IOException {
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        for (String tmp=bufferedReader.readLine();tmp!=null;tmp=bufferedReader.readLine()){
            stringBuilder.append(tmp);
        }
        return stringBuilder.toString();
    }
    //4.网络解析
    public static <T> T RequestData(String str,Class clazz){
        T t=(T) new Gson().fromJson(RequestData(str),clazz);
        return t;
    }
    //5.异步请求 AsyncTask
    public static void RequestData(final String str, final Class clazz, final CallBack callBack){
        new AsyncTask<String,Void, >(){

            @Override
            protected   doInBackground(String... strings) {
                return RequestData(str,clazz);
            }

            @Override
            protected void onPostExecute(  o) {
                callBack.onSuccess(o);
            }
        }.execute(str);
    }
}

App

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .memoryCacheSize(10)
                .diskCacheSize(10 * 1024 * 1024)
                .defaultDisplayImageOptions(new DisplayImageOptions.Builder()
                        .cacheOnDisk(true)
                        .cacheInMemory(true)
                        .bitmapConfig(Bitmap.Config.RGB_565)
                        .showImage ing(R.mipmap.ic_launcher)
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        .showImageOnFail(R.mipmap.ic_launcher)
                        .build()
                ).build();
        ImageLoader.getInstance().init(configuration);
    }
}

适配器

public class NewsAdapter extends  Adapter {
    private Context context;
    private List<NewsBean.ResultBean> list;

    public NewsAdapter(Context context) {
        this.context = context;
        list=new ArrayList<>();
    }

    public void setList(List<NewsBean.ResultBean> slist){
        //清空条目
        list.clear();
        if (slist!=null){
            list.addAll(slist);
        }
        notifyDataSetChanged();
    }

    public void addlist(List<NewsBean.ResultBean> slist){
        if (slist!=null){
            list.addAll(slist);
        }
        notifyDataSetChanged();
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView==null){
            convertView=LayoutInflater.from(context).inflate(R.layout.fragment_one_item,parent,false);
            holder=new ViewHolder();
            holder. =convertView.findViewById(R.id. );
            holder.icon=convertView.findViewById(R.id.icon);
            holder.wen=convertView.findViewById(R.id.wen);
            convertView.setTag(holder);
        }else {
            holder= (ViewHolder) convertView.getTag();
        }
        holder. .setText(getItem(position).getName());
        holder.wen.setText(getItem(position).getSummary());
        ImageLoader.getInstance().displayImage(getItem(position).getImageUrl(),holder.icon);
        return convertView;
    }

    class ViewHolder{
        TextView  ;
        ImageView icon;
        TextView wen;
    }
}

TabLayout

public class TabAdapter extends FragmentPagerAdapter {
    //创建数组标题
    private String[] biaoti=new String[]{
           \"正在热映\" ,\"即将上映\"
    };
    public TabAdapter(FragmentManager fm) {
        super(fm);
    }

    private String apiurl=\"\";
    @Override
    public Fragment getItem(int i) {
        switch (i){
            case 0:
                apiurl=\"http://172.17.8.100/movieApi/movie/v1/findHotMovieList?\";
            case 1:
                apiurl=\"http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?\";
        }
        //传值
        Bundle bundle = new Bundle();
        bundle.putString(\"apiurl\",apiurl);
        OneFragment oneFragment = new OneFragment();
        oneFragment.setArguments(bundle);
        return oneFragment;
    }

    @Override
    public int getCount() {
        return biaoti.length;
    }

    @Nullable
    @Override
    public CharSequence getPage (int position) {
        return biaoti[position];
    }
}

主Fragment

public class HomeFragment extends Fragment {

    private TabLayout tab;
    private ViewPager pagers;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_home,container,false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //控件
        tab = view.findViewById(R.id.tab);
        pagers = view.findViewById(R.id.pagers);
        //创建tab适配器
        TabAdapter tabAdapter=new TabAdapter(getChildFragmentManager());
        //pagers引用适配器
        pagers.setAdapter(tabAdapter);
        //相互绑定
        tab.setupWithViewPager(pagers);
    }
}

展示Fragment

public class OneFragment extends Fragment {

    private PullToRefreshListView ptr;
    private int pagers = 1;
    private final int count = 10;
    private NewsAdapter newsAdapter;
    private String apiurl;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_one, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //初始化
        pagers = 1;


        ptr = view.findViewById(R.id.ptr);
        newsAdapter = new NewsAdapter(getContext());
        ptr.setAdapter(newsAdapter);
        //设置允许
        ptr.setMode(PullToRefreshListView.Mode.BOTH);
        ptr.setOnRefreshListener(new PullToRefresh .OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefresh <ListView> refreshView) {
                pagers = 1;
                initData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefresh <ListView> refreshView) {
                initData();
            }

        });
        initData();
        pagers++;

    }

    private void initData() {

        apiurl = getArguments().getString(\"apiurl\");

        //回调
        NetUtil.getInstance().RequestData(apiurl + \"page=\" + pagers + \"&count=\" + count, NewsBean.class, new NetUtil.CallBack<NewsBean>() {
            @Override
            public void onSuccess(NewsBean newsBean) {
                if (pagers == 1) {
                    newsAdapter.setList(newsBean.getResult());
                } else {
                    newsAdapter.addlist(newsBean.getResult());
                }
                pagers++;
                //停止刷新加载
                ptr.onRefreshComplete();
            }
        });
    }
}
收藏 打印