zoukankan      html  css  js  c++  java
  • Android 动态刷新listview中的数据

    之前一直困扰listview刷新后位置的问题,现在才明白,原来不能重新设置listview的adapter,而应该用notifyDataSetChanged()来刷新,这样位置就不会置顶。

    下面做了一个测试的例子,点击最后一条记录,会增加一条新的记录,

    代码如下:

    1.TestAdapter

    package com.TestAdapter;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AbsListView.OnScrollListener;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.AbsListView;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class TestAdapter extends Activity {
        /** Called when the activity is first created. */
        private int[] images ;
        private ListView listview;
        private MyAdapter adapter;
        List<Map<String,Integer>> al;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            images =  new int[]{android.R.drawable.ic_btn_speak_now,
                    android.R.drawable.alert_light_frame,
                    android.R.drawable.arrow_down_float,
                    android.R.drawable.arrow_up_float,
                    android.R.drawable.btn_star_big_off,
                    android.R.drawable.btn_star_big_on,
                    android.R.drawable.button_onoff_indicator_off,
                    android.R.drawable.button_onoff_indicator_on,
                    android.R.drawable.checkbox_off_background,
                    android.R.drawable.checkbox_on_background,
                    android.R.drawable.ic_btn_speak_now,
                    android.R.drawable.ic_delete};
            listview = (ListView)findViewById(R.id.listview);
            al = new ArrayList<Map<String,Integer>>();
            for(int i=0; i<12; i++){
                HashMap<String,Integer > map = new HashMap<String,Integer>();
                map.put(""+i, images[i]);
                al.add(map);
            }
    
            adapter = new MyAdapter(this, al, R.layout.list_item, new String[]{"imageview", "tv"}, 
                    new int[]{R.id.imageview, R.id.tv});
            listview.setAdapter(adapter);
            listview.setOnItemClickListener(new OnItemClickListener() {
    
                public void onItemClick(AdapterView<?> arg0, View arg1, int count,
                        long arg3) {
                    if(adapter.getCount()==count+1){
                        HashMap<String ,Integer> map = new HashMap<String, Integer>();
                        map.put(""+(adapter.mItemList.size()), android.R.drawable.ic_dialog_email);
                        al.add(map);
                        adapter.mItemList = al;
                        adapter.notifyDataSetChanged();
                        Toast.makeText(TestAdapter.this, "正在刷新", Toast.LENGTH_SHORT).show();
                    }                
                }
            });
            
        }
        
        
        private class MyAdapter extends SimpleAdapter{
            int count = 0;
            private List<Map<String, Integer>> mItemList;
            public MyAdapter(Context context, List<? extends Map<String, Integer>> data,
                    int resource, String[] from, int[] to) {
                super(context, data, resource, from, to);
                mItemList = (List<Map<String, Integer>>) data;
                if(data == null){
                    count = 0;
                }else{
                    count = data.size();
                }
            }
            public int getCount() {
                return mItemList.size();
            }
    
            public Object getItem(int pos) {
                return pos;
            }
    
            public long getItemId(int pos) {
                return pos;
            }
            
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                Map<String ,Integer> map = mItemList.get(position);
                int image  =  map.get(""+position);
                View view = super.getView(position, convertView, parent);
                ImageView imageview = (ImageView)view.findViewById(R.id.imageview);
                TextView tv = (TextView)view.findViewById(R.id.tv);
                imageview.setBackgroundResource(image);
                tv.setText(""+position);
                return view;
            }
        }
    }

    2.main.xml

    <?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/listview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        ></ListView>
        
    </LinearLayout>

    3.list_item.xml

    <?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"
        >
        <ImageView 
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        </ImageView>
        <TextView
            android:id="@+id/tv" android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        ></TextView>
    </LinearLayout>
  • 相关阅读:
    SharePoint 2010 产品六大功能模块
    转:USB主机控制器(Host Controller)--深入理解
    转:C#基础知识梳理
    SharePoint 2010 Logging Improvements
    列表不能在数据表视图中显示
    selenium driver.close()与driver.quit()区别
    启动远程主机上的项目
    linux命令:passwd修改用户密码
    no crontab for root
    10位和13位时间戳转换成时间字符串
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4282184.html
Copyright © 2011-2022 走看看