天天看點

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) {

        @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"?>

    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

    <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"

    ></TextView>

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/786470,如需轉載請自行聯系原作者

繼續閱讀