Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 205|回复: 0

[默认分类] [转]notifyDataSetChanged() 动态更新ListView

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-11 15:08:32 | 显示全部楼层 |阅读模式
    有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView。今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.从今天起,每次学习的源代码都会打包上传,方便各位同学学习,注册帐号即可下载。
    布局main.xml:

    1.   
    2.    <?
    3.    xml version="1.0" encoding="utf-8"
    4.    ?>
    5.    
    6.    <
    7.    LinearLayout
    8.    xmlns:android
    9.    ="http://schemas.android.com/apk/res/android"
    10.    
    11. android:orientation
    12.    ="vertical"
    13.    
    14. android:layout_width
    15.    ="fill_parent"
    16.    
    17. android:layout_height
    18.    ="fill_parent"
    19.    
    20.    >
    21.    
    22.    <
    23.    ListView
    24.    android:id
    25.    ="@+id/lv"
    26.    
    27. android:layout_width
    28.    ="fill_parent"
    29.    
    30. android:layout_height
    31.    ="wrap_content"
    32.    
    33. android:text
    34.    ="@string/hello"
    35.    
    36.    />
    37.    
    38.    </
    39.    LinearLayout
    40.    >
    41.   
    复制代码

    ListView列表布局playlist.xml:

    1.   
    2.    <?
    3.    xml version="1.0" encoding="utf-8"
    4.    ?>
    5.    
    6.    <
    7.    TextView
    8.    android:id
    9.    ="@+id/text1"
    10.    
    11. xmlns:android
    12.    ="http://schemas.android.com/apk/res/android"
    13.    
    14. android:layout_width
    15.    ="fill_parent"
    16.    
    17. android:layout_height
    18.    ="30px"
    19.    
    20. android:textSize
    21.    ="18sp"
    22.    
    23.    ></
    24.    TextView
    25.    >
    26.   
    复制代码

    程序代码:

    1.   
    2.     1
    3.    import
    4.     java.util.ArrayList;
    5.     2
    6.    
    7.     3
    8.    
    9.    import
    10.     android.app.Activity;
    11.     4
    12.    
    13.    import
    14.     android.os.AsyncTask;
    15.     5
    16.    
    17.    import
    18.     android.os.Bundle;
    19.     6
    20.    
    21.    import
    22.     android.os.Handler;
    23.     7
    24.    
    25.    import
    26.     android.view.View;
    27.     8
    28.    
    29.    import
    30.     android.widget.AdapterView;
    31.     9
    32.    
    33.    import
    34.     android.widget.ArrayAdapter;
    35.    10
    36.    
    37.    import
    38.     android.widget.ListView;
    39.    11
    40.    
    41.    import
    42.     android.widget.AdapterView.OnItemClickListener;
    43.    12
    44.    
    45.    13
    46.    
    47.    public
    48.    
    49.    class
    50.     main
    51.    extends
    52.     Activity {
    53.    14
    54.    
    55.    /**
    56.     Called when the activity is first created.
    57.    */
    58.    
    59.    15
    60.     ListView lv;
    61.    16
    62.     ArrayAdapter
    63.    <
    64.    String
    65.    >
    66.     Adapter;
    67.    17
    68.     ArrayList
    69.    <
    70.    String
    71.    >
    72.     arr
    73.    =
    74.    new
    75.     ArrayList
    76.    <
    77.    String
    78.    >
    79.    ();
    80.    18
    81.     @Override
    82.    19
    83.    
    84.    public
    85.    
    86.    void
    87.     onCreate(Bundle savedInstanceState) {
    88.    20
    89.    
    90.    super
    91.    .onCreate(savedInstanceState);
    92.    21
    93.     setContentView(R.layout.main);
    94.    22
    95.     lv
    96.    =
    97.    (ListView)findViewById(R.id.lv);
    98.    23
    99.     arr.add(
    100.    "
    101.    123
    102.    "
    103.    );
    104.    24
    105.     arr.add(
    106.    "
    107.    234
    108.    "
    109.    );
    110.    25
    111.     arr.add(
    112.    "
    113.    345
    114.    "
    115.    );
    116.    26
    117.     Adapter
    118.    =
    119.    
    120.    new
    121.     ArrayAdapter
    122.    <
    123.    String
    124.    >
    125.    (
    126.    this
    127.    ,R.layout.playlist, arr);
    128.    27
    129.     lv.setAdapter(Adapter);
    130.    28
    131.     lv.setOnItemClickListener(lvLis);
    132.    29
    133.     editItem edit
    134.    =
    135.    
    136.    new
    137.     editItem();
    138.    30
    139.     edit.execute(
    140.    "
    141.    0
    142.    "
    143.    ,
    144.    "
    145.    第1项
    146.    "
    147.    );
    148.    //
    149.    把第一项内容改为"第一项"
    150.    
    151.    31
    152.    
    153.     Handler handler
    154.    =
    155.    new
    156.     Handler();
    157.    32
    158.     handler.postDelayed(add,
    159.    3000
    160.    );
    161.    //
    162.    延迟3秒执行
    163.    
    164.    33
    165.    
    166.     }
    167.    34
    168.     Runnable add
    169.    =
    170.    new
    171.     Runnable(){
    172.    35
    173.    
    174.    36
    175.     @Override
    176.    37
    177.    
    178.    public
    179.    
    180.    void
    181.     run() {
    182.    38
    183.    
    184.    //
    185.     TODO Auto-generated method stub
    186.    
    187.    39
    188.    
    189.     arr.add(
    190.    "
    191.    增加一项
    192.    "
    193.    );
    194.    //
    195.    增加一项
    196.    
    197.    40
    198.    
    199.     Adapter.notifyDataSetChanged();
    200.    41
    201.     }
    202.    42
    203.     };
    204.    43
    205.    
    206.    class
    207.     editItem
    208.    extends
    209.     AsyncTask
    210.    <
    211.    String,Integer,String
    212.    >
    213.    {
    214.    44
    215.     @Override
    216.    45
    217.    
    218.    protected
    219.     String doInBackground(String... params) {
    220.    46
    221.     arr.set(Integer.parseInt(params[
    222.    0
    223.    ]),params[
    224.    1
    225.    ]);
    226.    47
    227.    
    228.    //
    229.    params得到的是一个数组,params[0]在这里是"0",params[1]是"第1项"
    230.    48
    231.    
    232.    //
    233.    Adapter.notifyDataSetChanged();
    234.    49
    235.    
    236.    //
    237.    执行添加后不能调用 Adapter.notifyDataSetChanged()更新UI,因为与UI不是同线程
    238.    50
    239.    
    240.    //
    241.    下面的onPostExecute方法会在doBackground执行后由UI线程调用
    242.    
    243.    51
    244.    
    245.    
    246.    return
    247.    
    248.    null
    249.    ;
    250.    52
    251.     }
    252.    53
    253.    
    254.    54
    255.     @Override
    256.    55
    257.    
    258.    protected
    259.    
    260.    void
    261.     onPostExecute(String result) {
    262.    56
    263.    
    264.    //
    265.     TODO Auto-generated method stub
    266.    
    267.    57
    268.    
    269.    
    270.    super
    271.    .onPostExecute(result);
    272.    58
    273.     Adapter.notifyDataSetChanged();
    274.    59
    275.    
    276.    //
    277.    执行完毕,更新UI
    278.    
    279.    60
    280.    
    281.     }
    282.    61
    283.    
    284.    62
    285.     }
    286.    63
    287.    
    288.    private
    289.     OnItemClickListener lvLis
    290.    =
    291.    new
    292.     OnItemClickListener(){
    293.    64
    294.     @Override
    295.    65
    296.    
    297.    public
    298.    
    299.    void
    300.     onItemClick(AdapterView
    301.    <?>
    302.     arg0, View arg1,
    303.    int
    304.     arg2,
    305.    66
    306.    
    307.    long
    308.     arg3) {
    309.    67
    310.    
    311.    //
    312.    点击条目时触发
    313.    68
    314.    
    315.    //
    316.    arg2即为点中项的位置
    317.    
    318.    69
    319.    
    320.     setTitle(String.valueOf(arr.get(arg2)));
    321.    70
    322.    
    323.    71
    324.     }
    325.    72
    326.    
    327.    73
    328.     };
    329.    74
    330.    
    331.    75
    332.    }
    333.   
    复制代码

    来源网址:http://www.pocketdigi.com/20100827/75.html
    上面可以下载相应的源代码。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-26 19:31 , Processed in 0.410964 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表