平夕夕开发
效果图
页面
Dialog页面
- 设置页面标题
getActivity().setTitle(“设置标题”)
登录
登录处理:使用了LoginViewModel进行字符长度判断。
通过过滤器进行传值
fragment所在的activity都作用于一个activity中,一个intent对应可以对应多个fragment
- 通过startActivity来跳转页面
- 通过SDK中自带的LoginActivity来写登录页面 (要在SDK Manager -> SDK Tools 中安装 emulator SDK )
- LoginActivity.java LoginViewModel.java
- 完美的解决了关于Android开发 中mysql使用遇到的问题!!!
- 登录中的图标 是drawableLeft
- 通过一个进度条跳转到主页
问题:
注意到ip地址的变化,会导致连接数据库超时(一直卡在那里不动)
要将ip改为一个固定的ip地址
没网络也会导致无法访问到服务器数据库
网络编程:具体实现
- 先通过调用api借口使用
implementation 'org.xutils:xutils:3.3.40'
- 再初始化
public void onCreate() {
super.onCreate();
x.Ext.init(this);
//x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
}
- 再编写访问的地址
public String selectuser="http://39.108.61.227:80/json/su.php";
- 获取服务器数据
public void getData(){
RequestParams params = new RequestParams(url);
x.http().get(params,new Callback.CacheCallback<String>() {
@Override
public void onSuccess(String result){
Log.i("CommentFragment", result);
list = JSON.parseObject(result,
new TypeReference<List<HashMap<String, Object>>>() {
});
mData.clear();
mData.addAll(list);
adapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable ex, boolean isOnCallback){
}
@Override
public void onCancelled(CancelledException cex){
}
@Override
public void onFinshed(){
}
@Override
public boolean onCache(String result){
return false;
}
});
}
评论页面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4WBFNqq-1641134602673)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211212214609778.png)]
修改样式和主题顶部文字
通过getActivity().setTitle()修改内容
图片头像的形状,通过自定义的CircleImageView来改变,其中组件中的图片要通过src的形式添加。
android:src="@drawable/i3"
首页主要内容
顶部导航栏
- 1.搜索框
- 2.提交按钮
中间内容顶部导航栏
- 不同类别的内容
- 通过点击触发切换
- 推荐
- 一个网格布局
- 一个横向lineLayout
- 一个横向
- 一个瀑布流数据(实验10)
- E/RecyclerView: No adapter attached; skipping layout
Log.i("RecycleViewFragment", result); //有解析数据 返回
list = JSON.parseObject(result,
new TypeReference<List<HashMap<String, Object>>>() {
});
出现数据转换问题,不返回值,也不继续往下执行
- 解决方法:坚持onBindViewHolder中所写代码的准确性
Glide.with(getActivity()).load(new MyApplication().imagebaseurl + mData.get(position).get("picture").toString()).placeholder(R.mipmap.ic_launcher).into(holder.img);
get(“picture”) 与 数据库中字段名对应 picture。
- 食品
- 水果
- 通过recyclerView来进行嵌套gridlayout
- 一个单独的xml文件,recycler.xml
- 通过适配器的方式来进行配置
- 通过getData()去获取到bind视图绑定的数据
- 百货
- 手机
- 电脑
以上页面:
公用一个内容来显示数据
问题:
Duplicate resources
- 名字相同的错误,修改名字
当加入轮播图后,无法加载页面
中间内容
- 数据库中的数据 通过python爬虫去爬取数据,并将数据等写入python脚本中
- 自动操作数据库
- 最终将数据库上传到自己搭建的服务器当中(阿里云服务器)
- 配置mysql操作文件
- mysql的连接 数据库名 和 表名要区分开来
- mysql中的用户连接 服务器ip 要写对 要访问到数据
- 访问数据问题
- 高版本无法访问到数据(自己搭的服务器)
- 运用滚动条来查看商品信息
- 瀑布流显示所有商品
底部导航栏
实现
MainActivity.java R.id.nav_host_fragment-- > activity_main.xml fragment
-> fragment (id为nav_host_fragment) -> navigation/mobile_navigation ->nav_home
-> fragment_home.xml -> BottomNavigationView bottom_nav_menu -> fragment_home.xml
fragment navigation/mobile_navigation2 -> mobile_navigation2.xml -> 页面导航fragment
- 1.首页
- 定位到导航上
- 2.直播
- 通过下载 cn.jzvd:jiaozivideoplayer:7.7.0依赖实现播放视频
getItemCount() 返回值记得设置为mData.size()
- 3.分类
- 运用verticalTabLayout + YViewPager来实现侧边栏的效果
implementation 'q.rorbin:VerticalTabLayout:1.2.5'
- 4.聊天
- 运用recycleview实现滑动效果显示商家信息
- 5.个人中心
- 实现
- 如果数据提交上去,但是数据库没有进行更新操作,需要检查php中的数据库编写的代码是否正确。
- 数据库机制:有一个错误的字段,就所有字段不提交。
整体布局:
通过activity_main.xml进行布局,给一个容器(navigation)
容器中设置起始fragment,通过起始fragment设置viewpage来左右控制页面切换,
起始fragment中在设置底部导航栏,通过BottomNavigationView,在给一个容器来存放fragment
再在第二个容器中设置显示页面,这个页面就是一打开就看到的页面。就是viewpage页面
问题:
如果出现tablayout中tab中的button无法点击,多半是recycleviewfragment.xml文件布局的问题
通过对照viewpage.xml中的文件和recyclefragment.xml文件中的布局来改变。最终可以实现点击
(例如marin-top的高度等,不能让recycleviewfragment.xml文件中的嵌套在viewpage的tab上,或者遮挡住了tab的button)
底部导航栏的移位问题,出现有中文无法显示出来。
修改bottomnavigationview中的属性,
添加app:labelVisibilityMode=“labeled”
这样就显示全了文字信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iz9eMwBM-1641134602676)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211213174253966.png)]
CoordinatorLayout出现顶部空白
- 解决办法,删除配置中的 android:fitsSystemWindows=“true”
解决RecycleView底部内容被遮挡(bottomNavigationView)
生命周期 activity.xml -> graph.xml -> fragment_home.xml
Navigation 项目
activity.xml 中 navhostfragment nav_graph(id -> fragment容器 app:navGraph="@navigation/navigation")
HomeFragment home_fragment.xml Constrainlayout button
DetailFragment detail_fragment.xml Constrainlayout button
Navigation navigation (地图) 添加fragment graph
MainActivity.java
NavigationController navController = Navigation.findNavController(this,R.id.fragment);
NavigationUI.setupActionBarWithNavController(this,navController);
HomeFragment.java
NavigationController navController = Navigation.findNavController(this,R.id.button);
navController.navigate(R.id…)
ViewPager 不能同时在一个页面出现(为什么? )还没有解决
fragment跳转通过Intent通信跳转
activity不能直接跳到fragment
先通过一个activity再跳到fragment
改变为:
一个activity 对应 一个fragment
最终为:
两个activity ,在第二个activity中运用navigatie 去控制fragment,从home_fragement开始
无法实现底部导航栏的点击事件,所以最终改变了。与实验不同在于,实验是BottonNavigationView,而我的是LinerLayout,实现效果不一样
最终版为 5 个 activity对应 5 个fragment
并且在当前的fragment不能跳到属于自己的fragment
解决方法:
- 底部导航条的实现
- bottom_menu.xml 文件实现底部导航栏个单项
内容
Paging使用
网络+数据库
DiffUtil -> pagedList Adapter -> onBindViewHolder -> pagedList ->DataSource
- mainfests 允许网络访问
- 布局文件
build.gradle
- 数据在UserViewModel
- Room
修改商品操作
- 通过点击商品进入到商品详情页,通过点击修改和删除来改变商品。
- 修改商品,先获取到商品的基本信息:名称,描述,生产日期,图片
- 问题:
- 修改图片并进行保存,上传到服务器中,出现问题
- 1.修改服务器的php代码,将update.php中basename(xxx)返回的文件名与ip地址进行拼接操作
- 2.得到完整的图片地址,进行写入数据库,将数据库中picture的字段大小设置大一些,防止写入不完整。
- php中的字符串拼接操作是使用字符串连接符
.
和赋值运算符.=
- 解决成功
聊天页面显示
Android问题:android.graphics.drawable.TransitionDrawable cannot be cast to android.graph
通过设置Glide.with(context).load(url).asBitmap().into(img);解决