Android动态刷新listview中的数据

Android动态刷新listview中的数据

  【IT168技术】之前一直困扰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 >

你可能感兴趣的:(android,ui)