精华内容
下载资源
问答
  • 动态更新listView

    2011-05-19 11:47:05
    notifyDataSetChanged() 动态更新ListView 通过 Handler AsyncTask两种方式 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,...

    原文地址:http://www.pocketdigi.com/20100827/75.html

    notifyDataSetChanged() 动态更新ListView 通过 Handler AsyncTask两种方式

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <ListView  android:id="@+id/lv"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    </LinearLayout>

    ListView列表布局playlist.xml:

    1
    2
    3
    4
    5
    6
    7
    8
    
    <?xml version="1.0" encoding="utf-8"?>
    <TextView 
      android:id="@+id/text1"
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="30px"
      android:textSize="18sp"
    ></TextView>

    程序代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    
    package com.pocketdigi;
     
    import java.util.ArrayList;
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;
     
    public class main extends Activity {
        /** Called when the activity is first created. */
    	ListView lv;
    	ArrayAdapter<String> Adapter;
    	ArrayList<String> arr=new ArrayList<String>();
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            lv=(ListView)findViewById(R.id.lv);
        	arr.add("123");
        	arr.add("234");
        	arr.add("345");
        	Adapter = new ArrayAdapter<String>(this,R.layout.playlist, arr);
        	lv.setAdapter(Adapter);
        	lv.setOnItemClickListener(lvLis); 
        	editItem edit= new editItem();
        	edit.execute("0","第1项");//把第一项内容改为"第一项"
        	Handler handler=new Handler();
        	handler.postDelayed(add,3000);//延迟3秒执行
        }
        Runnable add=new Runnable(){
     
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			arr.add("增加一项");//增加一项
    			Adapter.notifyDataSetChanged();	
    		}   	
        };
        class editItem extends AsyncTask<String,Integer,String>{
    		@Override
    		protected String doInBackground(String... params) {
    				arr.set(Integer.parseInt(params[0]),params[1]);
    				//params得到的是一个数组,params[0]在这里是"0",params[1]是"第1项"
    				Adapter.notifyDataSetChanged();
    			return null;	
    		}
        }
        private OnItemClickListener lvLis=new OnItemClickListener(){
    		@Override
    		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    				long arg3) {
    			//点击条目时触发
    			//arg2即为点中项的位置
    			setTitle(String.valueOf(arr.get(arg2)));
     
    		}
     
        };
     
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Listview动态加载数据

    收藏 分享 2011-3-22 11:30| 发布者: annmax| 查看数: 456| 评论数: 0

    <!--[diy=diysummarytop]--><!--[/diy]-->
    摘要: 最近在研究网络数据加载的问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview中。我们必然会去单独开线程来做,这样造成的结果就是会出现等待时间很长,用户体验非 ...
    <!--[diy=diysummarybottom]--><!--[/diy]-->
    <!--[diy=diycontenttop]--><!--[/diy]-->
       最近在研究网络数据加载的问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview中。我们必然会去单独开线程来做,这样造成的结果就是会出现等待时间很长,用户体验非常不好。我的想法是动态加载数据,第一次加载十条,然后往下面滑动的时候再追加十条,再往下面滑动的时候再去追加,这样大大减少了用户等待的时间,同时给处理数据留下了时间。网上看到了这样一个例子,挺好的,我改动了一下,达到了我想要的结果。
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.BaseAdapter;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AbsListView.OnScrollListener;
    import android.widget.LinearLayout.LayoutParams;
    public class ListViewForLoading extends Activity implements OnScrollListener {
        private listViewAdapter adapter = new listViewAdapter();
        ListView listView;
        LinearLayout loadingLayout;
        private Thread mThread;
        /**
         * 设置布局显示属性
         */
        private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        /**
         * 设置布局显示目标最大化属性
         */
        private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.FILL_PARENT);
        private ProgressBar progressBar;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            init();
        }
        private void init() {
            // TODO Auto-generated method stub
            // 线性布局
            LinearLayout layout = new LinearLayout(this);
            // 设置布局 水平方向
            layout.setOrientation(LinearLayout.HORIZONTAL);
            // 进度条
            progressBar = new ProgressBar(this);
            // 进度条显示位置
            progressBar.setPadding(0, 0, 15, 0);
            // 把进度条加入到layout中
            layout.addView(progressBar, mLayoutParams);
            // 文本内容
            TextView textView = new TextView(this);
            textView.setText("加载中...");
            textView.setGravity(Gravity.CENTER_VERTICAL);
            // 把文本加入到layout中
            layout.addView(textView, FFlayoutParams);
            // 设置layout的重力方向,即对齐方式是
            layout.setGravity(Gravity.CENTER);
            // 设置ListView的页脚layout
            loadingLayout = new LinearLayout(this);
            loadingLayout.addView(layout, mLayoutParams);
            loadingLayout.setGravity(Gravity.CENTER);
            // 得到一个ListView用来显示条目
            listView = (ListView) findViewById(R.id.tv);
            // 添加到脚页显示
            listView.addFooterView(loadingLayout);
            // 给ListView添加适配器
            listView.setAdapter(adapter);
            // 给ListView注册滚动监听
            listView.setOnScrollListener(this);
        }
        /**
         * 要用用于生成显示数据
         *
         * @author huangbq
         *
         */
        class listViewAdapter extends BaseAdapter {
            int count = 10;
            public int getCount() {
                return count;
            }
            public Object getItem(int pos) {
                return pos;
            }
            public long getItemId(int pos) {
                return pos;
            }
            public View getView(int pos, View v, ViewGroup p) {
                TextView view;
                if (v == null) {
                    view = new TextView(ListViewForLoading.this);
                } else {
                    view = (TextView) v;
                }
                view.setText("ListItem " + pos);
                view.setTextSize(20f);
                view.setGravity(Gravity.CENTER);
                view.setHeight(60);
                return view;
            }
        }
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            if(firstVisibleItem+visibleItemCount==totalItemCount)
            {
                //开线程去下载网络数据
                if (mThread == null || !mThread.isAlive()) {
                    mThread = new Thread() {
                        @Override
                        public void run() {
                            try {
                                //这里放你网络数据请求的方法,我在这里用线程休眠5秒方法来处理
                                Thread.sleep(5000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            Message message = new Message();
                            message.what = 1;
                            handler.sendMessage(message);
                        }
                    };
                    mThread.start();               
                }
            }
        }
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub       
        }
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                switch (msg.what) {
                case 1:
                    if (adapter.count <= 41) {
                        adapter.count += 10;
                        int currentPage = adapter.count / 10;
                        Toast.makeText(getApplicationContext(),"第" + currentPage + "页", Toast.LENGTH_LONG).show();
                    } else {
                        listView.removeFooterView(loadingLayout);
                    }
                    //重新刷新Listview的adapter里面数据
                    adapter.notifyDataSetChanged();
                    break;
                default:
                    break;
                }
            }
        };
    }
    运行结果如下图:

    展开全文
  • 动态更新ListView

    千次阅读 2013-04-03 00:15:59
    实现效果:当滑动ListView列表最底端时,动态的添加新的列表项 实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法判断当列表滑动到最低端时,加载新的列表项 ...

    实现效果:当滑动ListView列表最底端时,动态的添加新的列表项
    实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法判断当列表滑动到最低端时,加载新的列表项

    接口OnScrollListener
        onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

        view :报告滑动状态的视图
        firstVisibleItem:可视的第一个列表项的索引
        visibleItemCount: 可视的列表项个数
        totalItemCount :总共的列表项个数 
    onScrollStateChanged(AbsListView view, int scrollState)
          view: 报告滑动状态的视图
          scrollState: 滑动状态 
    滑动状态
          SCROLL_STATE_IDLE : 0  视图没有滑动
          SCROLL_STATE_TOUCH_SCROLL : 1  用户正在触摸滑动,手指仍在屏幕上
          SCROLL_STATE_FLING : 2  用户之前触摸滑动,现在正在滑行,直到停止 
    示例代码: 

    package dyingbleed.iteye;
    
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class Main extends ListActivity {
    	
    	private ListView listView;
    	private MyListViewAdapter adapter;
    	
    	private int scrollState;
    	
    	private View footerView;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            listView = getListView();
            
            footerView = LayoutInflater.from(this).inflate(R.layout.progress, null);
            		
            listView.addFooterView(footerView); //在ListView底部添加正在加载视图  
            //注意:addFooterView方法需要在调用setListAdapter方法前调用!
            adapter = new MyListViewAdapter();
            setListAdapter(adapter);
            getListView().setOnScrollListener(new AbsListView.OnScrollListener() {
    			
    			@Override
    			public void onScrollStateChanged(AbsListView view, int scrollState) {
    				Main.this.scrollState = scrollState;
    			}
    			
    			@Override
    			public void onScroll(AbsListView view, int firstVisibleItem,
    					int visibleItemCount, int totalItemCount) {
    				int lastVisibleItem = firstVisibleItem + visibleItemCount - 1; //可视的最后一个列表项的索引
    				/*
    				 * 当列表正处于滑动状态且滑动到列表底部时,执行
    				 * */
    				if(Main.this.scrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
    						&& lastVisibleItem == totalItemCount - 1) {
    					/*
    					 * 执行线程,睡眠5秒钟后添加10个列表项
    					 * */
    					new Thread() {
    						
    						private Handler handler = new Handler() {
    
    							@Override
    							public void handleMessage(Message msg) {
    								super.handleMessage(msg);
    								adapter.count += 10;
    								adapter.notifyDataSetChanged();
    							}
    							
    						};
    
    						@Override
    						public void run() {
    							super.run();
    							try {
    								sleep(5000);
    								handler.sendEmptyMessage(0);
    							} catch (InterruptedException e) {
    								e.printStackTrace();
    							}
    						}
    						
    					}.start();
    					
    				}
    			}
    		});
        }
        
        private class MyListViewAdapter extends BaseAdapter {
        	
        	int count = 50; //初始列表项数量
    
    		@Override
    		public int getCount() {
    			return count;
    		}
    
    		@Override
    		public Object getItem(int position) {
    			return position;
    		}
    
    		@Override
    		public long getItemId(int position) {
    			return position;
    		}
    
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			TextView result = (TextView) convertView;
    			if(result == null) {
    				result = new TextView(Main.this);
    				result.setTextAppearance(Main.this, android.R.style.TextAppearance_Large);
    				AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.FILL_PARENT,
    						AbsListView.LayoutParams.WRAP_CONTENT);
    				result.setLayoutParams(layoutParams);
    				result.setGravity(Gravity.CENTER);
    			}
    			result.setText("Item "+(position+1));
    			return result;
    		}
        	
        }
    }


    运行结果

     

     

    展开全文
  • 动态更新ListView

    2012-08-04 16:36:18
    http://www.cnblogs.com/wangjianhui/archive/2011/06/15/2081705.html
    http://www.cnblogs.com/wangjianhui/archive/2011/06/15/2081705.html
    展开全文
  • 动态更新 ListView

    2012-08-03 17:40:15
    http://www.cnblogs.com/wangjianhui/archive/2011/06/15/2081705.html
    展开全文
  • 主要介绍了Android编程实现动态更新ListView的方法,结合实例形式详细分析了ListView的布局及动态更新实现方法,需要的朋友可以参考下
  • 本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法。分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器...
  • notifyDataSetChanged() 动态更新ListView

    万次阅读 2018-07-22 00:13:11
    有时候我们需要修改已经生成的列表,添加或者...今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView。   &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt...
  • flutter动态更新ListView

    千次阅读 2020-08-24 22:39:04
    需要更新适配器并调用notifyDataSetChanged。在Flutter中,如果setState()中更新widget列表,您会...要更新ListView,然后在setState中创建一个新的List()并将所有旧数据复制到新列表中。这是实现更新的简单方法。
  • 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在...今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.布局main.xml: 1 <?xml version="1.0" encodi...
  • Android操作数据的动态更新ListView

    千次阅读 2016-07-14 23:18:36
    Android操作数据的动态更新ListView你能猜想这是我四个按钮操作之后的效果图吗布局文件:activity_main.xml xmlns:tools="http://schemas.android.com/tools" android
  • 有时候我们需要修改已经生成的列表,添加或者修改...今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.从今天起,每次学习的源代码都会打包上传,方便各位同学学习,注册帐号即可下载。 布局main.xml:
  • 有时候我们需要修改已经生成的列表,添加或者修改数据,...AsyncTask两种方式来动态更新ListView.从今天起,每次学习的源代码都会打包上传,方便各位同学学习,注册帐号即可下载。布局main.xml: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 604
精华内容 241
关键字:

动态更新listview