android adapter不刷新数据,android – BaseAdapter.notifyDatasetChanged()不更新ListView

当我调用notifyDatasetChanged()时,为什么我的listview不会更新?

我可以使它显示数据的唯一方法是,再次在ListView上调用setAdatper()…我也尝试通过runOnUIThread()调用它,它没有更改任何内容

适配器

/**

* Adapter to provide the data for the online scores

*

* @author soh#zolex

*

*/

public class OnlinescoresAdapter extends BaseAdapter {

private Context context;

private List scores = new ArrayList();

/**

* Constructor

*

* @param Context context

*/

public OnlinescoresAdapter(Context context) {

this.context = context;

}

/**

* Add an item to the adapter

*

* @param item

*/

public void addItem(scoreItem item) {

this.scores.add(item);

}

/**

* Get the number of scores

*

* @return int

*/

public int getCount() {

return this.scores.size();

}

/**

* Get a score item

*

* @param int pos

* @return Object

*/

public Object getItem(int pos) {

return this.scores.get(pos);

}

/**

* Get the id of a score

*

* @param in pos

* @retrn long

*/

public long getItemId(int pos) {

return 0;

}

/**

* Get the type of an item view

*

* @param int pos

* @return int

*/

public int getItemViewType(int arg0) {

return arg0;

}

/**

* Create the view for a single list item.

* Load it from an xml layout.

*

* @param int pos

* @param View view

* @param ViewGroup viewGroup

* @return View

*/

public View getView(int pos,View view,ViewGroup group) {

LinearLayout layout;

if (view == null) {

layout = (LinearLayout)View.inflate(this.context,R.layout.scoreitem,null);

} else {

layout = (LinearLayout)view;

}

TextView position = (TextView)layout.findViewById(R.id.pos);

TextView time = (TextView)layout.findViewById(R.id.time);

TextView player = (TextView)layout.findViewById(R.id.player);

TextView createdAt = (TextView)layout.findViewById(R.id.created_at);

scoreItem item = (scoreItem)getItem(pos);

player.setText(item.player);

position.setText(String.valueOf(new Integer(item.position)) + ".");

time.setText(String.format("%.4f",item.time));

createdAt.setText(item.created_at);

return layout;

}

/**

* Get the number of different views

*

* @return int

*/

public int getViewTypeCount() {

return 1;

}

/**

* Return wheather the items have stable IDs or not

*

* @return boolean

*/

public boolean hasStableIds() {

return false;

}

/**

* Return wheather the list is empty or not

*

* @return boolean

*/

public boolean isEmpty() {

return this.scores.size() == 0;

}

/**

* No need of a data observer

*

* @param DataSetObserver arg0

* @return void

*/

public void registerDataSetObserver(DataSetObserver arg0) {

}

/**

* No need of a data observer

*

* @param DataSetObserver arg0

* @return void

*/

public void unregisterDataSetObserver(DataSetObserver arg0) {

}

/**

* No item should be selectable

*

* @return boolean

*/

public boolean areAllItemsEnabled() {

return false;

}

/**

* No item should be selectable

*

* @param int pos

* @return boolean

*/

public boolean isEnabled(int arg0) {

return false;

}

}

活动

XMLLoaderThread工作正常,只是notifyDatasetChanged似乎什么也不做…

/**

* Obtain and display the online scores

*

* @author soh#zolex

*

*/

public class OnlinescoresDetails extends ListActivity {

WakeLock wakeLock;

OnlinescoresAdapter adapter;

boolean isLoading = false;

int chunkLimit = 50;

int chunkOffset = 0;

@Override

/**

* Load the scores and initialize the pager and adapter

*

* @param Bundle savedInstanceState

*/

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

this.wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,"racesow");

adapter = new OnlinescoresAdapter(this);

setListAdapter(adapter);

this.loadData();

setContentView(R.layout.listview);

getListView().setOnScrollListener(new OnScrollListener() {

public void onScrollStateChanged(AbsListView view,int scrollState) {

}

public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount) {

if (totalItemCount > 0 && visibleItemCount > 0 && firstVisibleItem + visibleItemCount >= totalItemCount) {

if (!isLoading) {

loadData();

}

}

}

});

}

public void loadData() {

final ProgressDialog pd = new ProgressDialog(OnlinescoresDetails.this);

pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);

pd.setMessage("Obtaining scores...");

pd.setCancelable(false);

pd.show();

isLoading = true;

String mapName = getIntent().getStringExtra("map");

XMLLoaderThread t = new XMLLoaderThread("http://racesow2d.warsow-race.net/map_positions.PHP?name=" + mapName + "&offset=" + this.chunkOffset + "&limit=" + this.chunkLimit,new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

// network error

case 0:

new AlertDialog.Builder(OnlinescoresDetails.this)

.setMessage("Could not obtain the maplist.\nCheck your network connection and try again.")

.setNeutralButton("OK",new OnClickListener() {

public void onClick(DialogInterface arg0,int arg1) {

finish();

overridePendingTransition(0,0);

}

})

.show();

break;

// maplist received

case 1:

pd.dismiss();

InputStream xmlStream;

try {

xmlStream = new ByteArrayInputStream(msg.getData().getString("xml").getBytes("UTF-8"));

XMLParser parser = new XMLParser();

parser.read(xmlStream);

NodeList positions = parser.doc.getElementsByTagName("position");

int numPositions = positions.getLength();

for (int i = 0; i < numPositions; i++) {

Element position = (Element)positions.item(i);

scoreItem score = new scoreItem();

score.position = Integer.parseInt(parser.getValue(position,"no"));

score.player = parser.getValue(position,"player");

score.time = Float.parseFloat(parser.getValue(position,"time"));

score.created_at = parser.getValue(position,"created_at");

adapter.addItem(score);

}

adapter.notifyDataSetChanged();

chunkOffset += chunkLimit;

isLoading = false;

} catch (UnsupportedEncodingException e) {

new AlertDialog.Builder(OnlinescoresDetails.this)

.setMessage("Internal error: " + e.getMessage())

.setNeutralButton("OK",null)

.show();

}

break;

}

pd.dismiss();

}

});

t.start();

}

/**

* Acquire the wakelock on resume

*/

public void onResume() {

super.onResume();

this.wakeLock.acquire();

}

/**

* Release the wakelock when leaving the activity

*/

public void onDestroy() {

super.onDestroy();

this.wakeLock.release();

}

/**

* Disable animations when leaving the activity

*/

public void onBackPressed() {

this.finish();

this.overridePendingTransition(0,0);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值