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);
}
}