关于ProgressDialog无法显示的问题

神奇的老王 2014-04-15 04:57:04
我之前在尝试获取联系人信息的时候,发现读取联系人的时间比较久于是想在读取联系人的时候,应用显示一个进度条之类的东西
写了如下代码,为了省事没有加入多线程
但是测试发现ProgressDialog无法显示,请大家帮我看看是什么问题


package com.example.contactlist;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity {

Context myContext = null;
MyListAdapter myListAdapter = null;
ViewHolder viewHolder = null;

private ProgressDialog progressDialog = null;

//用于存储联系人名称
List<String> myContactName = new ArrayList<String>();
//用于存储联系人电话
List<String> myContactNumber = new ArrayList<String>();
//用于存储联系人总数
int myContactAmount = 0;

public void onCreate(Bundle savedInstanceState) {

myContext = this;

getContactInfo();

myListAdapter = new MyListAdapter(this);
setListAdapter(myListAdapter);
super.onCreate(savedInstanceState);
}

public void getContactInfo(){
//使用getContentResolver方法来读取联系人的表
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);

//获取联系人总数
myContactAmount = cursor.getCount();

//声明一个progressDialog
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setTitle("正在获取联系人信息,请稍等:");
progressDialog.setIndeterminate(false);
progressDialog.setMax(myContactAmount);
progressDialog.show();

int i = 0;
while(cursor.moveToNext()){
i++;
//联系人的ID
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//联系人的名称
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//联系人的电话
String number = "";

//联系人是否有电话号码
int isHas = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts. HAS_PHONE_NUMBER)));

if(isHas>0){
Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+" = " + id,null,null);
while(c.moveToNext()){
number += c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+" ";
}
c.close();
}
myContactName.add(name);
myContactNumber.add(number);
progressDialog.setProgress(i);
}
cursor.close();
progressDialog.dismiss();

}

class MyListAdapter extends BaseAdapter {

public MyListAdapter(Context context){
myContext = context;
}


public int getCount() {
// TODO Auto-generated method stub
return myContactName.size();
}

public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub


if(convertView == null){
viewHolder = new ViewHolder();

convertView = LayoutInflater.from(myContext).inflate(R.layout.list, null);
viewHolder.name = (TextView) convertView.findViewById(R.id.name);
viewHolder.number = (TextView) convertView.findViewById(R.id.number);

convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.name.setText(myContactName.get(position));
viewHolder.number.setText(myContactNumber.get(position));

return convertView;
}
}

private static class ViewHolder
{
TextView name;
TextView number;

}

}



...全文
296 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
映映 2014-04-15
  • 打赏
  • 举报
回复
删除 progressDialog.dismiss(); 看看兑换框是否显示
hvk687 2014-04-15
  • 打赏
  • 举报
回复
你在同一个函数里面分别调用了 show, dismiss,如果中间的while比较快话,你估计是会看到屏幕模糊一下吧

80,350

社区成员

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

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