咨讯项目
1.搭建xml
1.1主界面 ViewPager+BottomNavigationView
1.2创建五个Fragment,五个底部导航
1.3创建适配器集成FragmentPagerAdapter
1.4把Fragment集合传给FragmentPagerAdapter中
public class MymainAdapter extends FragmentPagerAdapter{
List<Fragment> list;
public MymainAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
}
1.5添加底部导航和viewPager点击事件
//todo 底部导航的监听事件
注:myBottomView 为底部空间的ID名字,viewpager即可
myBottomView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.main_btn:
viewpager.setCurrentItem(0);
return true;
case R.id.know_btn:
viewpager.setCurrentItem(1);
return true;
case R.id.pub_btn:
viewpager.setCurrentItem(2);
return true;
case R.id.item_btn:
viewpager.setCurrentItem(3);
return true;
case R.id.my_btn:
viewpager.setCurrentItem(4);
return true;
default:
break;
}
return false;
}
});
//todo viewPager的监听事件
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//页面滚动时
@Override
public void onPageScrolled(int i, float v, int i1) {
}
//页面选中时
@Override
public void onPageSelected(int i) {
myBottomView.getMenu().getItem(i).setChecked(true);
}
//页面的滚动状态
@Override
public void onPageScrollStateChanged(int i) {
}
});
1.6设置改变底部的图片颜色和文字颜色
//todo 设置小图标为添加颜色
myElecBottomView.setItemIconTintList(null);
ColorStateList colorlist = getResources().getColorStateList(R.color.navigation_textcolor);
myElecBottomView.setItemTextColor(colorlist);
//todo 默认当前选中
myElecBottomView.getMenu().getItem(0).setChecked(true);
1.7对其进行添加搜索框
2.第一个Fragment的页面逻辑
2.1.1界面分为两大模块:Banner和Recyclerview
2.1.2第一个Banner:通过retrofit中get请求获取到Banner的数据源,然后填充到Banner中。
//todo 下载Banner的数据
List<BanerBean.DataBean> banerdata = new ArrayList<>();//banner数据源
List<String> pic = new ArrayList<>(); //图片
List<String> title = new ArrayList<>();//标题
public void initBaner() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
Myservice myservice = retrofit.create(Myservice.class);
Call<BanerBean> banerBean = myservice.getBanerBean();
banerBean.enqueue(new Callback<BanerBean>() {
@Override
public void onResponse(Call<BanerBean> call, Response<BanerBean> response) {
banerdata = response.body().getData();
}
@Override
public void onFailure(Call<BanerBean> call, Throwable t) {
System.out.println(t.getMessage());
}
});
pic.clear();
title.clear();
for (int i = 0; i <banerdata.size(); i++) {
pic.add(banerdata.get(i).getImagePath());
title.add(banerdata.get(i).getTitle());
}
myBaner.setImages(pic);
myBaner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
myBaner.setDelayTime(2000);
myBaner.setImageLoader(new MyImagealoader());
创建MyImageLoader类进行加载图片
myBaner.setBannerTitles(title);
myBaner.isAutoPlay(true);
myBaner.start();
2.2.1RecyclerView的展示流程:
搭建子布局xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="120dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_name"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/text_time"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/text_content">
</TextView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:id="@+id/text_require"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/oneheart"
android:background="@drawable/heart"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
</LinearLayout>
创建适配器
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
List<RecycBean.DataBean.DatasBean> recycdatalist = new ArrayList<>();
Context context;
private ImageView oneheart;
public void refresh(List<RecycBean.DataBean.DatasBean> recycdatalist) {
this.recycdatalist.addAll(recycdatalist);
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
context = viewGroup.getContext();
View inflate = LayoutInflater.from(context).inflate(R.layout.item_recyclerview, viewGroup, false);
oneheart = inflate.findViewById(R.id.oneheart);
oneheart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
});
return new MyViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
myViewHolder.name.setText(recycdatalist.get(i).getSuperChapterName());
myViewHolder.content.setText(recycdatalist.get(i).getTitle());
myViewHolder.require.setText(recycdatalist.get(i).getChapterName());
myViewHolder.time.setText(recycdatalist.get(i).getVisible() + "天前");
myViewHolder.content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, TwoWebActivity.class);
intent.putExtra("url", recycdatalist.get(i).getLink());
intent.putExtra("title", recycdatalist.get(i).getTitle());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return recycdatalist.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView name, time, content, require;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.text_name);
time = itemView.findViewById(R.id.text_time);
content = itemView.findViewById(R.id.text_content);
require = itemView.findViewById(R.id.text_require);
}
}
}
RecyclerView绑定数据源与适配器
//todo recyclerview的逻辑
private void initRecyclerview() {
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
myRecycler.setLayoutManager(manager);
Retrofit retrofits = new Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
MyRecycService myRecycService = retrofits.create(MyRecycService.class);
Map map = new HashMap();
final Call<RecycBean> recycBean = myRecycService.getRecycBean(map);
recycBean.enqueue(new Callback<RecycBean>() {
@Override
public void onResponse(Call<RecycBean> call, Response<RecycBean> response) {
recycdata = response.body().getData().getDatas();
myRecyclerAdapter = new MyRecyclerAdapter();
myRecyclerAdapter.refresh(recycdata);
myRecycler.setAdapter(myRecyclerAdapter);
}
@Override
public void onFailure(Call<RecycBean> call, Throwable t) {
System.out.println(t.getMessage());
}
});
myRecycler.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
}
private void initView(View inflate) {
myBaner = (Banner) inflate.findViewById(R.id.myBaner);
myRecycler = (RecyclerView) inflate.findViewById(R.id.myRecycler);
}
2.2.3点击Recyclerview条目跳转到webview
把当前页面的值传给webview,然后通过加载跳转到webview页面。
3.第二个(知识体系)Fragment,RecyclerView页面,然后并跳转,不做过多解释。。。。。
4.第三个(公众号)的Fragment
Tablayout+RecyclerView,然后点击item 跳转到webview上
5.第四个(项目)的Fragment
Tablayout+RecyclerView,然后点击item 跳转到webview上
跳转
6.登录界面
点击登录,调到登录界面,然后返回,用户名出现在登录按钮上
,下面三个列表,第一个我的收藏,点击跳转到登录界面
第二个,设置,跳转到设置列表,有夜间模式,无图模式,自动模式,意见反馈,清空缓存,版本等等,点击对应的弹出相应的对话框。
点击搜索框,页面中有一个Recyclerview,用于存放搜索过的标签,还有搜索历史,和垃圾桶,
最后实现登录注册功能!不做过多详细介绍!!!
谢谢观看。