**
先倒依赖: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();
}
});
}
}
继续阅读与本文标签相同的文章
-
开发者必读 · 周报 | 002期
2026-05-19栏目: 教程
-
斩获2019中国金融科技创新大赛金奖,蚂蚁金服mPaaS助力打造超级App生态
2026-05-19栏目: 教程
-
有呀!互联网icp许可证除申请以外有转让的吗?飞起
2026-05-19栏目: 教程
-
Apache Zepplin使用Hive Interpreter查询
2026-05-19栏目: 教程
-
大宗货运如何实现“重去重回”?
2026-05-19栏目: 教程
