Android ListView 更改数据

ListViewCURD (增删改查) 操作终于来到最后一章了,啥都不说了,直接上范例

等等,有几句话,前面我们好几次都调用了 notifyDataSetChanged()

notifyDataSetChanged()

对于 ListView ,进行了数据修改操作后,都会调用一个 notifyDataSetChanged()

notifyDataSetChanged() 并不会把界面上显示的的 item 都重绘一次,而是会判断是否需要重新渲染,如果当前 item 没有必要重新渲染 是不会重新渲染的,如果某个 Item 的状态发生改变,都会导致 View 的重绘,而重绘的并不是 所有的 Item,而是 View 状态发生变化的那个 Item

好了,我们可以继续了

ListView 数据更新


其实,更新 ListView 中的数据也有两种办法

  1. 根据对象更新
  2. 根据游标(pos) 更新

从某些方面说,第二种最后也会调用第一种,所以,我就不写那么多,直接用第一种了

  1. 复用 Android ListView 添加插入数据 中最后的 demo

  2. 修改 TalkAdapter.java 添加一个方法 update() 方法

    public void update(int position, TalkBean data) {
    
        mData.set(position,data);
    
        notifyDataSetChanged();
    }
    

    然后还要替换一下 getItem() 方法

    @Override
    public Object getItem(int position) {
        return mData.get(position);
    }
    
  3. 然后修改布局 activity_main.xml 添加一个 更改数据 按钮

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="8dp" 
        android:orientation="vertical" >
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="8dp" 
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/btn_add"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                android:text = "添加" />
    
            <Button
                android:id="@+id/btn_update"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                android:text = "更改数据 3" />
    
        </LinearLayout>
    
        <include  
                android:id="@+id/talk_empty"  
                layout="@layout/listview_empty"/>
    
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    
  4. 修改 MainActivity.java 添加按钮的点击事件

    package cn.twle.android.listviewcrud;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.widget.ListView;
    import android.widget.Button;
    import android.widget.Toast;
    import android.widget.AdapterView;
    
    import android.view.View;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private ListView listview;
        private TalkAdapter talkAdapter = null;
        private List<TalkBean> mData = null;
        private int flag = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            listview = (ListView) findViewById(R.id.listview);
    
            View listview_empty = findViewById(R.id.talk_empty);  
            listview.setEmptyView(listview_empty);
    
            mData = new LinkedList<TalkBean>();
            talkAdapter = new TalkAdapter((LinkedList<TalkBean>) mData,MainActivity.this);
    
            listview.setAdapter(talkAdapter);
    
            Button btn_add = findViewById(R.id.btn_add);
            Button btn_update = findViewById(R.id.btn_update);
    
            btn_add.setOnClickListener(this);
            btn_update.setOnClickListener(this);
        }
    
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_add:
                    talkAdapter.add(new TalkBean(R.drawable.golf,"你好 " + flag));
                    flag++;
                    break;
    
                case R.id.btn_update:
                    // position  0 开始算的
                    TalkBean d = (TalkBean)talkAdapter.getItem(2);
    
                    d.setSay(d.getSay()+ "u");
    
                    talkAdapter.update(2,d);
                    break;
            }
        }
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.