您的位置:首页 > 移动开发 > Android开发

Android动态刷新listview中的数据

2012-02-22 10:01 429 查看
之前一直困扰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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: