开发中遇到的问题
- 1.ViewHolder显示不正确
- 2.采用cardview的时候,发现代码不会自动联想
- 3.复杂表格的实现,单独的头表,列表,数据可以上下左右滑动
- 4.ScrollView嵌套RecyclerView出现滑动冲突
- 5.Toolbar的title居中显示
- 6.安卓的回车事件
- 7.安卓SVN文件上传(忽略文件和上传设置)
- 7.2 忽略文件的设置在Android studio3.6以上的时候是不一样的了
- 设置好忽略文件,在上传的时候发现VCS-->Import Into Version Control,会发现只有Import Into Subversion选项,并没有Share Project(Subversion)这个选项。
- 8.修改项目最外面的名称
- 9.SVN上传的两种方式(import into version control)
- 10.当SVN上传的时候非常卡
1.ViewHolder显示不正确
问题描述:viewHolder中需要实现收起和展开的功能,但是发现点击第一个item进行展开,结果第九个item也展开了。输出了一下地址,发现其实这两个用的是同一个,第九个复用了第一个的view。
问题解决:在onBindViewHolder方法里面,当控件显示不一样的时候,不应该简单的套用页面,而是要根据条件进行页面的初始化。
if (true==flagMap.get(position)){//展开状态
holder.showText.setText("详情收起");
holder.recyclerView.setVisibility(View.VISIBLE);
}else{//收起状态
holder.showText.setText("详情展开");
holder.recyclerView.setVisibility(View.GONE);
}
2.采用cardview的时候,发现代码不会自动联想
问题描述:通常情况下在xml里面输入前面几个字母,应该会自动联想的,但是发现采用cardview的时候没有办法联想。
问题解决: 引入这个依赖 implementation ‘com.google.android.material:material:1.3.0-alpha04’
依赖引入成功后,不要忘记clean一下,否则的话在编写代码的时候没办法看预览效果。
3.复杂表格的实现,单独的头表,列表,数据可以上下左右滑动
**问题描述:**项目中需要展示数据,需要单独的数据头和数据列,内容可以上下左右滑动,并且滑动数据的时候头也需要跟着滑动。
问题解决:1思路来源 2.另一个demo
4.ScrollView嵌套RecyclerView出现滑动冲突
问题描述:左滑的scrollView嵌套了一个向下滑动的recyclerView,滑动的时候会出现卡顿的情况。
解决办法:参考博客
解决的逻辑,通过判断滑动手势的斜率,如果竖着的Y偏移量大,那么应该是向下滑动,这个动作应该由RecyclerView来执行,如果是横着的X的偏移量大,那么说明应该是想要左右滑动,那么应该是交给父来执行操作,主要是重写ScrollView的onInterceptTouchEvent的方法,当返回true的时候代表这次事件是当前控件来执行,false就是继续传递。UP和DOWN事件需要继续传递下去的,所以直接为false,只有MOVE的事件需要进行判断
/**
* 是否intercept当前的触摸事件
* @param ev 触摸事件
* @return true:调用onMotionEvent()方法,并完成滑动操作
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercepted = false;
float x = ev.getX();
float y = ev.getY();
int action = ev.getAction() & MotionEvent.ACTION_MASK;
switch (action) {
case MotionEvent.ACTION_DOWN:
intercepted = false;
//初始化mActivePointerId
super.onInterceptTouchEvent(ev);
break;
case MotionEvent.ACTION_MOVE:
//横坐标位移增量
float deltaX = x - mLastXIntercept;
//纵坐标位移增量
float deltaY = y - mLastYIntercept;
if (Math.abs(deltaX) < Math.abs(deltaY)) {//Y的偏移量大 所以交给子去处理
intercepted = false;
} else {//X的偏移量大 所以是给父亲处理
intercepted = true;
}
break;
case MotionEvent.ACTION_UP: {
intercepted = false;
break;
}
}
mLastXIntercept = x;
mLastYIntercept = y;
return intercepted;
}
其中的int action = ev.getAction() & MotionEvent.ACTION_MASK;是为了实现对触摸进行归类操作。
参考博客
5.Toolbar的title居中显示
protected void setTitleCenter(Toolbar toolbar) {
TextView textView = (TextView)toolbar.getChildAt(0);//主标题,title对应的textview
textView.setTextSize(15);//根据标题长度设置合适的字体大小,不设置默认时候五个中文字符就会向右严重偏移
textView.setGravity(Gravity.CENTER);//设置textview里面字体居中
Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.CENTER;//设置textview居中
textView.setLayoutParams(params);//相当于设置成layout_width="wrap_content" layout_height="match_parent"
}
6.安卓的回车事件
由于是给工厂用的程序,他们一般采用的是手持终端,采用扫码进行操作,每次扫码之后会自动回车,所以需要根据回车去跳转下一个编辑框。
keyCode ==KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_DOWN 这句话是用来判断是否是回车按键,并且回车按键按下时候触发,如果不加后半句抬起和按下都会触发,会导致两次。
searchEdit.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode ==KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_DOWN){
####具体回车之后需要实现的逻辑写在这里#####
return true;
}
return false;
}
});
7.安卓SVN文件上传(忽略文件和上传设置)
1.配置忽略文件
开发中免不了要合作修改一个项目,所以上传文件的时候需要把本地的一些配置文件给屏蔽掉,毕竟同事之间的开发环境也不一定一样。以下是我每次上传前需要设置的忽略文件,切记一定要上传前设置好,否则上传之后再设置好像就没效果了。
2.开始项目上传的配置
7.2 忽略文件的设置在Android studio3.6以上的时候是不一样的了
Android Studio -> Preferences ->Editor ->File types
选择第一个ignore,然后将需要忽略的内容配置进去,每一项用;隔开。
设置好忽略文件,在上传的时候发现VCS–>Import Into Version Control,会发现只有Import Into Subversion选项,并没有Share Project(Subversion)这个选项。
在项目的.idea文件夹,找到vcs.xml文件,把里面的vcs=“svn"改为vcs=”"
8.修改项目最外面的名称
有时候开发完毕了,但是发现项目名字不对,那么如何对最外层的项目名字进行修改呢?
Android studio 如果采用rename的方式修改最外面的项目名称的话,Android studio会提示说无法进行修改,如果需要修改根目录名字
只能关闭Android Studio 先在操作系统中修改文件夹名字。
1.关闭Android Studio
2.修改project所在路径的文件夹名字为[NewName]。
3.打开Android Stuido,import新的[NewName]路径工程
(重新import工程,Android Studio会自动修改部分相关的project名字引用)
4.修改根目录下的.iml文件名为[NewName].iml,及该文件中的external.linked.project.id=[NewName]
5.修改.idea/modules.xml中的module fileurl将旧名字改成新名字
6.settings.gradle 里面rootProject.name也需要进行修改
以上如果只进行到第二步,那么最外层的项目名改好了,但是打开的时候项目名旁边会有个【旧名字】,只有一直到第六步才能使得整个项目的名字都改成新的名字。
9.SVN上传的两种方式(import into version control)
1.import into subversion
2.share Project(subversion) (推荐方法)
看到博客里面上传svn都是采用share的方法进行,为什么不采用import我表示很疑惑,直到我看到了一篇博客,
import into subversion
对于创建人而言,其实import的方法是直接将当前的项目传到服务器上,但是并没有和本地的项目进行关联,如果想要进行关联还需要重新checkout回来。
share Project(subversion)
而share方法是先将本地的项目与服务器关联,但是项目没有真正的传到服务器上,只有share完毕之后点击commit提交上去,服务器上才有当前的版本,当然对于创建人而言肯定是share方法比较方便。
10.当SVN上传的时候非常卡
上传非常卡,光光share的时候都要半个多小时
这个要先去看看是不是上传的时候没有设置忽略文件或者少忽略了某些文件,这个真的卡到爆炸的,因为我就是有一次忘记把.idea这个文件夹放到忽略文件里面了,由于我是用选择的方式进行文件夹的忽略,而不是手输,结果坑爹的是选择文件夹的时候这个会自动不显示的。不知道哪些需要忽略的话,请看第七条