当前位置:编程学习 > wap >>

android 实现无刷新 动态添加记录

  需求
   在客户端显示记录页向服务器添加记录,添加完成后页面更新。

  详情
    最初想用ListView实现,但后来还是通过LinearLayout动态添加layout实现的,一个原因是考虑到数据量不大(5条以内),另外一个原因是由于向ListView中添加数据需要刷新所有记录,个人体验不好,再有就是再添加一条记录时是有一个添加动画,ListView不方便实现,或者说我没有想到只添加一条记录,其他记录不变化的方法。
   问题
    目前可实现动态添加,但每天记录都添加至页面的下面,现在想将每次添加的新记录添加至页面的最顶端,如何动态添加? 用ListView可否实现,要保证只有新添加的记录执行添加动画。


    不知道我描述的是否清楚,若有不清楚的地方,可提出,我再详加说明,最后希望各位不吝赐教,谢谢
   Android listview 动画 --------------------编程问答-------------------- 怎么就没个人回呢? --------------------编程问答-------------------- 哎 这CSDN是一茬儿不如一茬儿了~ --------------------编程问答-------------------- 用listview可行。
只需要设置动画监听的end方法中刷新listview即可。 --------------------编程问答--------------------
引用 3 楼 wlcw16 的回复:
用listview可行。
只需要设置动画监听的end方法中刷新listview即可。
 可不可以直接将item添加至listview顶部呢?这样就不用刷新了。 另外添加一个item的动画怎么执行呢,在哪儿调用啊 --------------------编程问答--------------------
引用 4 楼 gqs519 的回复:
Quote: 引用 3 楼 wlcw16 的回复:

用listview可行。
只需要设置动画监听的end方法中刷新listview即可。
 可不可以直接将item添加至listview顶部呢?这样就不用刷新了。 另外添加一个item的动画怎么执行呢,在哪儿调用啊

我们项目做得是继承一个listview,然后在listview中写方法。
添加的话先是把要添加的item放到adapter的list中去。
然后执行动画。
监听动画的end,在end内调用notifychange --------------------编程问答--------------------
引用 5 楼 wlcw16 的回复:
Quote: 引用 4 楼 gqs519 的回复:

Quote: 引用 3 楼 wlcw16 的回复:

用listview可行。
只需要设置动画监听的end方法中刷新listview即可。
 可不可以直接将item添加至listview顶部呢?这样就不用刷新了。 另外添加一个item的动画怎么执行呢,在哪儿调用啊

我们项目做得是继承一个listview,然后在listview中写方法。
添加的话先是把要添加的item放到adapter的list中去。
然后执行动画。
监听动画的end,在end内调用notifychange
方法写在不重要,什么时候能执行更新我也了解。不过我还有两个问题,首先你说的“然后执行动画”是在针对item的view还是listView呢 ,这个动画执行是在adapter的getView里执行吗?还有 在未更新之前,item是不是被添加至了listview的末尾,更新完才移至顶端,可不可以在执行完动画后就让其置于顶端,更新与否由用户自己决定。感谢回复 --------------------编程问答-------------------- 执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。

--------------------编程问答--------------------
引用 7 楼 wlcw16 的回复:
执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。

不好意思 再问一下 ,在第3步里 把“新item防止list首位”  是放到ListView的首位吗,这个怎么该怎么放呢?“旧item同时往下移动一格”是需要自己用动画实现吗?? 不好意思麻烦了,有没有demo可以给我看下呢 --------------------编程问答--------------------
引用 7 楼 wlcw16 的回复:
执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试 --------------------编程问答--------------------
引用 9 楼 gqs519 的回复:
Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
--------------------编程问答--------------------
引用 10 楼 wlcw16 的回复:
Quote: 引用 9 楼 gqs519 的回复:

Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
  哦了解了  “旧item同时往下移动一格,新item渐变出现” 这个是listView和item同时执行动画吗 ,这一步item 其实是加到了ListView外面是吧 刷新完成后 才加进ListView --------------------编程问答--------------------
引用 11 楼 gqs519 的回复:
Quote: 引用 10 楼 wlcw16 的回复:

Quote: 引用 9 楼 gqs519 的回复:

Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
  哦了解了  “旧item同时往下移动一格,新item渐变出现” 这个是listView和item同时执行动画吗 ,这一步item 其实是加到了ListView外面是吧 刷新完成后 才加进ListView


同时执行也可以,先后顺序也可以。item已经加到list的adapter里了

我是直接写在自定义listView里面了
有个public addItem方法 穿进去item的数据

然后里面有一些private doAnimation方法在addItem里面调用。 --------------------编程问答--------------------
引用 12 楼 wlcw16 的回复:
Quote: 引用 11 楼 gqs519 的回复:

Quote: 引用 10 楼 wlcw16 的回复:

Quote: 引用 9 楼 gqs519 的回复:

Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
  哦了解了  “旧item同时往下移动一格,新item渐变出现” 这个是listView和item同时执行动画吗 ,这一步item 其实是加到了ListView外面是吧 刷新完成后 才加进ListView


同时执行也可以,先后顺序也可以。item已经加到list的adapter里了

我是直接写在自定义listView里面了
有个public addItem方法 穿进去item的数据

然后里面有一些private doAnimation方法在addItem里面调用。
 请问 这个类 能让我看看吗 如果不方便就算了 --------------------编程问答--------------------
引用 13 楼 gqs519 的回复:
Quote: 引用 12 楼 wlcw16 的回复:

Quote: 引用 11 楼 gqs519 的回复:

Quote: 引用 10 楼 wlcw16 的回复:

Quote: 引用 9 楼 gqs519 的回复:

Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
  哦了解了  “旧item同时往下移动一格,新item渐变出现” 这个是listView和item同时执行动画吗 ,这一步item 其实是加到了ListView外面是吧 刷新完成后 才加进ListView


同时执行也可以,先后顺序也可以。item已经加到list的adapter里了

我是直接写在自定义listView里面了
有个public addItem方法 穿进去item的数据

然后里面有一些private doAnimation方法在addItem里面调用。
 请问 这个类 能让我看看吗 如果不方便就算了


个人代码可以给你。。。不过这是公司的代码,还没开源,虽然是我写的但是也是公司的版权,不好意思了,这个因为签过保密协议,要承担责任的。不过你有什么问题我可以帮你解答。 --------------------编程问答--------------------
引用 14 楼 wlcw16 的回复:
Quote: 引用 13 楼 gqs519 的回复:

Quote: 引用 12 楼 wlcw16 的回复:

Quote: 引用 11 楼 gqs519 的回复:

Quote: 引用 10 楼 wlcw16 的回复:

Quote: 引用 9 楼 gqs519 的回复:

Quote: 引用 7 楼 wlcw16 的回复:

执行动画说的是新item的出现,和整体listView的items的往下移动

动画的执行是由你的事件触发,不是在getView里执行,getview只负责显示。

具体的过程大概是

1.用户点击更新按钮来触发这个更新事件。
2.把更新的item放到adapter的数据的末端,但是在getView中并不现实新加的项目。刷新listview。这步相当于把listview给整体扩大一格。
3.把新item放到list首位。同时调用动画效果。旧item同时往下移动一格,新item渐变出现(这个效果可以随意做)。
4.监听动画完成事件,在onAnimationEnd方法内刷新listView即可

整个刷新流程结束。

对于用户选择不更新的办法,只需要将上述步骤倒过来执行。
  是通过这个方法加吗 listView.addView(child,postion),我先试试


不是。应该是把item的数据放到adapter中的list的首位
一般的adapter都会维护一个list,来存放它所有item的数据,
然后在getView中通过这个list,来生成出一个要显示的View

比如说可以是List<String> 
然后在getView中可以
TextView tv = new TextView(context);
tv.setText(list.get(position));
return tv;

是这个意思。
  哦了解了  “旧item同时往下移动一格,新item渐变出现” 这个是listView和item同时执行动画吗 ,这一步item 其实是加到了ListView外面是吧 刷新完成后 才加进ListView


同时执行也可以,先后顺序也可以。item已经加到list的adapter里了

我是直接写在自定义listView里面了
有个public addItem方法 穿进去item的数据

然后里面有一些private doAnimation方法在addItem里面调用。
 请问 这个类 能让我看看吗 如果不方便就算了


个人代码可以给你。。。不过这是公司的代码,还没开源,虽然是我写的但是也是公司的版权,不好意思了,这个因为签过保密协议,要承担责任的。不过你有什么问题我可以帮你解答。
 那这样啊 没什么。可不可以说下 addItem()方法的思路呢 怎么捕获添加第一个Item的动作呢  --------------------编程问答-------------------- 其实这是一个事件驱动。
比如说你的一个后台更新事件的响应,或者刷新按钮被点击事件的响应,来触发listView.addItem(Item)
add方法中,首先把参数item加入到adapter的list中去(最后并隐藏),刷新;
然后把item放到首位 position=0
从p=1的位置做循环
循环{
doAnimation(p,p+1)//这部就是把从1开始的旧项目往下移一个。如果p是最后一个,设置end监听。
}
动画完了之后刷新list即可。 --------------------编程问答--------------------
引用 16 楼 wlcw16 的回复:
其实这是一个事件驱动。
比如说你的一个后台更新事件的响应,或者刷新按钮被点击事件的响应,来触发listView.addItem(Item)
add方法中,首先把参数item加入到adapter的list中去(最后并隐藏),刷新;
然后把item放到首位 position=0
从p=1的位置做循环
循环{
doAnimation(p,p+1)//这部就是把从1开始的旧项目往下移一个。如果p是最后一个,设置end监听。
}
动画完了之后刷新list即可。


我是想知道 执行每个执行下移动画itemView是怎么取得的? 可不可以让他们整体下移,一个一个的下移,如果item多些 会不会就比较慢?还有 下移一格,这个移动距离是怎么控制的呢? --------------------编程问答--------------------
引用 17 楼 gqs519 的回复:
Quote: 引用 16 楼 wlcw16 的回复:

其实这是一个事件驱动。
比如说你的一个后台更新事件的响应,或者刷新按钮被点击事件的响应,来触发listView.addItem(Item)
add方法中,首先把参数item加入到adapter的list中去(最后并隐藏),刷新;
然后把item放到首位 position=0
从p=1的位置做循环
循环{
doAnimation(p,p+1)//这部就是把从1开始的旧项目往下移一个。如果p是最后一个,设置end监听。
}
动画完了之后刷新list即可。


我是想知道 执行每个执行下移动画itemView是怎么取得的? 可不可以让他们整体下移,一个一个的下移,如果item多些 会不会就比较慢?还有 下移一格,这个移动距离是怎么控制的呢?


做动画你要取得一个view主体。整体下移关键他们不是一个整体。所以不可以。目前我们压力测试300个也是丝般顺滑(nexus10)。其实我们做的是拖拽的gridView,逻辑上要更难一些。

距离可以拿到p+1点的y 就是距离 --------------------编程问答--------------------
引用 18 楼 wlcw16 的回复:
Quote: 引用 17 楼 gqs519 的回复:

Quote: 引用 16 楼 wlcw16 的回复:

其实这是一个事件驱动。
比如说你的一个后台更新事件的响应,或者刷新按钮被点击事件的响应,来触发listView.addItem(Item)
add方法中,首先把参数item加入到adapter的list中去(最后并隐藏),刷新;
然后把item放到首位 position=0
从p=1的位置做循环
循环{
doAnimation(p,p+1)//这部就是把从1开始的旧项目往下移一个。如果p是最后一个,设置end监听。
}
动画完了之后刷新list即可。


我是想知道 执行每个执行下移动画itemView是怎么取得的? 可不可以让他们整体下移,一个一个的下移,如果item多些 会不会就比较慢?还有 下移一格,这个移动距离是怎么控制的呢?


做动画你要取得一个view主体。整体下移关键他们不是一个整体。所以不可以。目前我们压力测试300个也是丝般顺滑(nexus10)。其实我们做的是拖拽的gridView,逻辑上要更难一些。

距离可以拿到p+1点的y 就是距离
这个View怎么取得呢,就是adapter中getView 返回的View对象。还有这个动画是在什么情况下执行呢 --------------------编程问答--------------------
引用 19 楼 gqs519 的回复:
Quote: 引用 18 楼 wlcw16 的回复:

Quote: 引用 17 楼 gqs519 的回复:

Quote: 引用 16 楼 wlcw16 的回复:

其实这是一个事件驱动。
比如说你的一个后台更新事件的响应,或者刷新按钮被点击事件的响应,来触发listView.addItem(Item)
add方法中,首先把参数item加入到adapter的list中去(最后并隐藏),刷新;
然后把item放到首位 position=0
从p=1的位置做循环
循环{
doAnimation(p,p+1)//这部就是把从1开始的旧项目往下移一个。如果p是最后一个,设置end监听。
}
动画完了之后刷新list即可。


我是想知道 执行每个执行下移动画itemView是怎么取得的? 可不可以让他们整体下移,一个一个的下移,如果item多些 会不会就比较慢?还有 下移一格,这个移动距离是怎么控制的呢?


做动画你要取得一个view主体。整体下移关键他们不是一个整体。所以不可以。目前我们压力测试300个也是丝般顺滑(nexus10)。其实我们做的是拖拽的gridView,逻辑上要更难一些。

距离可以拿到p+1点的y 就是距离
这个View怎么取得呢,就是adapter中getView 返回的View对象。还有这个动画是在什么情况下执行呢

getChildAt方法取得view

动画执行是根据事件驱动。这就得看腻了
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,