关于Adapter的notifyDataSetChanged无法刷新的问题。

1、notifyDataSetChanged()方法必须放到UI线程中。

2、adapter中的数据源改变前和改变后引用的对象必须是同一个。



修改前(无效):




import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.crigh.ygty_slotcard.application.Const;
import com.crigh.ygty_slotcard.application.XmApplication;
import com.crigh.ygty_slotcard.slotcardinfo.entity.SlotcardModel;
import com.crigh.ygty_slotcard.slotcardinfo.service.SlotcardService;

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.OnNavigationListener;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SpinnerAdapter;

public class CopyOfCardListActivity extends ActionBarActivity {
	private ActionBar actionBar;
	private SlotcardService slotcardService;
	private List<SlotcardModel> cardlist=null;
	private ListView cardList ;
	private List<Map<String, Object>> dataMap ;
	private String status;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_cardlist);
		actionBar = this.getSupportActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setDisplayShowHomeEnabled(false);
		SpinnerAdapter spAdapter = ArrayAdapter.createFromResource(this, R.array.cardzt, android.R.layout.simple_spinner_dropdown_item);
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		actionBar.setListNavigationCallbacks(spAdapter,new BarOnNavigationListener());
		
		cardList = (ListView) findViewById(R.id.card_list);
		<span style="color:#FF0000;">dataMap = initData();</span>
		// 配置ListView适配器
		SimpleAdapter adapter = new SimpleAdapter(this, dataMap,
				R.layout.card_item, new String[] { "c_id", "c_cardid",
						"c_date","c_status","c_hdmc" }, new int[] { R.id.c_id, R.id.c_cardid,
						R.id.c_date,R.id.c_status,R.id.c_hdmc});
		cardList.setAdapter(adapter);

	}
	
	private class BarOnNavigationListener implements OnNavigationListener{
		@Override
		public boolean onNavigationItemSelected(int itemPosition, long itemId) {
			String[] zts = getResources().getStringArray(R.array.cardzt);
			String zt = zts[itemPosition];
			if(Const.STATUS_WTB.equals(zt)){
				status = Const.STATUS_WTB;
				
			}else if(Const.STATUS_YTB.equals(zt)){
				status=Const.STATUS_YTB;
			}
			SimpleAdapter adapter = (SimpleAdapter) cardList.getAdapter();
			dataMap = initData();
			adapter.notifyDataSetChanged();
			return true;
		}
		
	}

	
	/**
	 * 获取显示数据
	 * 
	 * @return
	 */
	public List<Map<String, Object>> initData() {
		List<Map<String, Object>> dataMap = new ArrayList<Map<String,Object>>();
		dataMap.clear();
		Map<String, Object> paramMap = new HashMap<String, Object>();
		if(status!=null&&!"".equals(status)){
			paramMap.put("cstatus", status);
		}
		slotcardService = new SlotcardService(this);
		cardlist = slotcardService.list(0, 0, paramMap, "desc");
		for (SlotcardModel m : cardlist) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("c_id", m.getId());
			map.put("c_cardid", m.getC_cardid());
			map.put("c_date", m.getC_date());
			map.put("c_hdmc", m.getC_hdmc());
			System.out.println("sadadd"+m.getC_hdmc());
			String status = m.getC_status();
			map.put("c_status", status);
			dataMap.add(map);
		}
		return dataMap;
	}
	
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.cardlist, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		
		if(id == android.R.id.home){
			this.finish();
		}
		return super.onOptionsItemSelected(item);
	}

}

修改后(有效):

package com.crigh.ygty_slotcard;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.crigh.ygty_slotcard.application.Const;
import com.crigh.ygty_slotcard.application.XmApplication;
import com.crigh.ygty_slotcard.slotcardinfo.entity.SlotcardModel;
import com.crigh.ygty_slotcard.slotcardinfo.service.SlotcardService;

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.OnNavigationListener;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SpinnerAdapter;

public class CopyOfCardListActivity extends ActionBarActivity {
	private ActionBar actionBar;
	private SlotcardService slotcardService;
	private List<SlotcardModel> cardlist=null;
	private ListView cardList ;
	private List<Map<String, Object>> dataMap ;
	private String status;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_cardlist);
		actionBar = this.getSupportActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setDisplayShowHomeEnabled(false);
		SpinnerAdapter spAdapter = ArrayAdapter.createFromResource(this, R.array.cardzt, android.R.layout.simple_spinner_dropdown_item);
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		actionBar.setListNavigationCallbacks(spAdapter,new BarOnNavigationListener());
		
		cardList = (ListView) findViewById(R.id.card_list);
		dataMap = new ArrayList<Map<String,Object>>();
		<span style="color:#FF0000;">initData();</span>
		// 配置ListView适配器
		SimpleAdapter adapter = new SimpleAdapter(this, dataMap,
				R.layout.card_item, new String[] { "c_id", "c_cardid",
						"c_date","c_status","c_hdmc" }, new int[] { R.id.c_id, R.id.c_cardid,
						R.id.c_date,R.id.c_status,R.id.c_hdmc});
		cardList.setAdapter(adapter);

	}
	
	private class BarOnNavigationListener implements OnNavigationListener{
		@Override
		public boolean onNavigationItemSelected(int itemPosition, long itemId) {
			String[] zts = getResources().getStringArray(R.array.cardzt);
			String zt = zts[itemPosition];
			if(Const.STATUS_WTB.equals(zt)){
				status = Const.STATUS_WTB;
				
			}else if("已同步".equals(zt)){
				status=Const.STATUS_YTB;
			}
			SimpleAdapter adapter = (SimpleAdapter) cardList.getAdapter();
			<span style="color:#FF0000;">initData();</span>
			adapter.notifyDataSetChanged();
			return true;
		}
		
	}

	
	/**
	 * 获取显示数据
	 * 
	 * @return
	 */
	public void initData() {
		dataMap.clear();
		Map<String, Object> paramMap = new HashMap<String, Object>();
		if(status!=null&&!"".equals(status)){
			paramMap.put("cstatus", status);
		}
		slotcardService = new SlotcardService(this);
		cardlist = slotcardService.list(0, 0, paramMap, "desc");
		for (SlotcardModel m : cardlist) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("c_id", m.getId());
			map.put("c_cardid", m.getC_cardid());
			map.put("c_date", m.getC_date());
			map.put("c_hdmc", m.getC_hdmc());
			System.out.println("sadadd"+m.getC_hdmc());
			String status = m.getC_status();
			map.put("c_status", status);
			dataMap.add(map);
		}
	}
	
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.cardlist, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		
		if(id == android.R.id.home){
			this.finish();
		}
		return super.onOptionsItemSelected(item);
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值