listView数据重复显示

qwe5399303 2014-07-23 09:41:10
大家好,以下为小弟写的代码,listView数据重复显示,也就是网络获取为1条数据,但是我显示2条,求各位大牛帮忙找下问题。代码如下
public class VoiceListActivity extends Activity implements XListView.IXListViewListener{
private XListView list_voice;
private ListVoiceAdapter adapter;
private ProgressDialog progressDialog;
private List<VoiceType> voices = new ArrayList<VoiceType>();
private int page=1;
private int rows=20;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.acivity_voice_list);
list_voice = (XListView) this.findViewById(R.id.list_voice);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("请稍候...");
list_voice.setPullRefreshEnable(false);
list_voice.setPullLoadEnable(false);
list_voice.setXListViewListener(this);
getvoiceList(page);
list_voice.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int pos,
long arg3) {
// TODO Auto-generated method stub
Intent intent = new Intent(VoiceListActivity.this,
VoiceDetailsActivity.class);
VoiceType str=(VoiceType) adapter.getItemAtPosition(pos);
intent.putExtra("time", str.getTime());
startActivity(intent);
}
});
}
public void getvoiceList(final int page) {
AsyncTask<String, Integer, Voice> task = new AsyncTask<String, Integer, Voice>() {
@Override
protected Voice doInBackground(String... params) {
try {
User user=DoulianwangSharedPreference.getUser(VoiceListActivity.this);
return RemoteDataService.getVoiceList(user.getName(),page);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Voice rst) {
if (rst != null) {
if(rst.getVoiceDate().size()==0){
Toast.makeText(VoiceListActivity.this, "加载完毕,无语音记录", Toast.LENGTH_LONG).show();
}else{
voices.addAll(rst.getVoiceDate());
adapter = new ListVoiceAdapter(VoiceListActivity.this, voices);
list_voice.setAdapter(adapter);
list_voice.setSelection((page-1)*rows);
}
if(rst.getVoiceDate().size()<20){
list_voice.setPullLoadEnable(false);
}else{
list_voice.setPullLoadEnable(true);
}
} else {
showTip(getString(R.string.timeout));
}
progressDialog.dismiss();
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
progressDialog.dismiss();
}

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog.show();
}
};
task.execute();
}
public void clearVoiceList() {
AsyncTask<String, Integer, Boolean> task = new AsyncTask<String, Integer, Boolean>() {
@Override
protected Boolean doInBackground(String... params) {
try {
return RemoteDataService.isClear(VoiceListActivity.this);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Boolean rst) {
if (rst != null) {
if(rst){
File file=new File(Environment.getExternalStorageDirectory().getPath()+"/"+"travel"+"/");
if(file.exists()){
DeleteFile(file);
voices.clear();
if(adapter != null){
adapter.notifyDataSetChanged();
}else{
Toast.makeText(VoiceListActivity.this, "暂无语音记录", Toast.LENGTH_LONG).show();
}
Toast.makeText(VoiceListActivity.this, "清空数据成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(VoiceListActivity.this, "暂无语音记录", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(VoiceListActivity.this, "清空数据失败", Toast.LENGTH_LONG).show();
}
} else {
showTip(getString(R.string.timeout));
}
progressDialog.dismiss();
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
progressDialog.dismiss();
}

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog.show();
}
};
task.execute();
}

private void showTip(String tip) {
new AlertDialog.Builder(VoiceListActivity.this).setMessage(tip)
.setPositiveButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).create().show();
}


private void DeleteFile(File file) {
if (file.exists() == false) {
Toast.makeText(VoiceListActivity.this, "文件或文件夹不存在",
Toast.LENGTH_LONG).show();
return;
} else {
if (file.isDirectory()) {
File[] childFile = file.listFiles();
if (childFile == null || childFile.length == 0) {
return;
}
for (File f : childFile) {
//DeleteFile(f);
f.delete();
}
}
}
}
public void clearVoice(View view){
final DoulianwangDialog td=new DoulianwangDialog(VoiceListActivity.this, R.style.travel_dialog, R.layout.dialog_sure,DoulianwangDialog.Default_Width,130);
TextView tv=(TextView)td.findViewById(R.id.msg);
tv.setText("是否清空语音记录?");
Button btn=(Button)td.findViewById(R.id.sure);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearVoiceList();
td.cancel();
}
});
Button cancel=(Button)td.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
td.cancel();
}
});
td.show();
}
public void backClick(View view) {
finish();
}
@Override
public void onRefresh() {
// TODO Auto-generated method stub

}
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
System.out.println("onLoadMore");
page++;
getvoiceList(page);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
page=1;
voices.clear();
getvoiceList(page);
super.onResume();
}
}
...全文
332 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwe5399303 2014-07-23
  • 打赏
  • 举报
回复
引用 4 楼 lionfresh 的回复:
[quote=引用 3 楼 qwe5399303 的回复:] [quote=引用 2 楼 lionfresh 的回复:] 这个要看你RemoteDataService.getVoiceList(user.getName(),page);返回的是什么了。
返回是正常的数据条数。但是不知道为什么请求2次服务器[/quote] voices.addAll(rst.getVoiceDate());中rst.getVoiceDate()返回的是几条? [/quote] 服务器返回的是4条,我这得到的也是4条,但是onCreate是不知道什么原因请求了两次服务器,也就是调用了两次clearVoiceList() 方法,但是我找不到哪调用另一次,刚进去页面先显示正常4条数据然后闪一下变成8条。
lionfresh 2014-07-23
  • 打赏
  • 举报
回复
引用 3 楼 qwe5399303 的回复:
[quote=引用 2 楼 lionfresh 的回复:] 这个要看你RemoteDataService.getVoiceList(user.getName(),page);返回的是什么了。
返回是正常的数据条数。但是不知道为什么请求2次服务器[/quote] voices.addAll(rst.getVoiceDate());中rst.getVoiceDate()返回的是几条?
qwe5399303 2014-07-23
  • 打赏
  • 举报
回复
引用 2 楼 lionfresh 的回复:
这个要看你RemoteDataService.getVoiceList(user.getName(),page);返回的是什么了。
返回是正常的数据条数。但是不知道为什么请求2次服务器
lionfresh 2014-07-23
  • 打赏
  • 举报
回复
这个要看你RemoteDataService.getVoiceList(user.getName(),page);返回的是什么了。
qwe5399303 2014-07-23
  • 打赏
  • 举报
回复
有人帮忙看下吗?
HappyDelano 2014-07-23
  • 打赏
  • 举报
回复
引用 5 楼 qwe5399303 的回复:
[quote=引用 4 楼 lionfresh 的回复:] [quote=引用 3 楼 qwe5399303 的回复:] [quote=引用 2 楼 lionfresh 的回复:] 这个要看你RemoteDataService.getVoiceList(user.getName(),page);返回的是什么了。
返回是正常的数据条数。但是不知道为什么请求2次服务器[/quote] voices.addAll(rst.getVoiceDate());中rst.getVoiceDate()返回的是几条? [/quote] 服务器返回的是4条,我这得到的也是4条,但是onCreate是不知道什么原因请求了两次服务器,也就是调用了两次clearVoiceList() 方法,但是我找不到哪调用另一次,刚进去页面先显示正常4条数据然后闪一下变成8条。[/quote] clearVoiceList() 方法打印个栈log,就知道第二次是在哪儿调用的了
qwe5399303 2014-07-23
  • 打赏
  • 举报
回复
什么原因呢?

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧