Android ListActivity不显示列表

Android ListActivity不显示列表,android,android-listview,progressdialog,Android,Android Listview,Progressdialog,我有一个LIstActivity,它使用URL在线从xml文件加载一个列表,但是LIstActivity只有在没有使用可运行对象或线程的情况下才能成功加载,如果我使用一个进度环并首先在线程中启动该环,或者先在可运行中启动该环,然后进度环显示并完成其工作,但我只获得ListActivities标题,但没有ListActivity的列表或主体 以下是我的代码: ProgressDialog ringProgressDialog; private Handler handler = new Handl

我有一个LIstActivity,它使用URL在线从xml文件加载一个列表,但是LIstActivity只有在没有使用可运行对象或线程的情况下才能成功加载,如果我使用一个进度环并首先在线程中启动该环,或者先在可运行中启动该环,然后进度环显示并完成其工作,但我只获得ListActivities标题,但没有ListActivity的列表或主体

以下是我的代码:

ProgressDialog ringProgressDialog;
private Handler handler = new Handler();

private static XMLParser parser;
private static String xml;
private static Document doc;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ringProgressDialog = ProgressDialog.show(this, "Please wait ...",
            "Beer's Downloading!", true);
    ringProgressDialog.setCancelable(true);
    Thread t = new Thread() {
        public void run() {
            menuItems = new ArrayList<HashMap<String, String>>();
            Log.d("CHECKER", "just entered the Activity");
            parser = new XMLParser();
            xml = parser.getXmlFromUrl(URL); // getting XML
            doc = parser.getDomElement(xml); // getting DOM
            Log.d("CHECKER", "parsing the elements from XML");
            NodeList nl = doc.getElementsByTagName(KEY_RECORD);
            // looping through all item nodes <item>
            Log.d("CHECKER", "started inputting values into map one by one");

            for (int i = 0; i < nl.getLength(); i++) {
                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();
                Element e = (Element) nl.item(i);
                // adding each child node to HashMap key => value
                map.put(KEY_CODE, parser.getValue(e, KEY_CODE));
                map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
                map.put(KEY_COMPANY, parser.getValue(e, KEY_COMPANY));
                map.put(KEY_CATNUM, parser.getValue(e, KEY_CATNUM));
                map.put(KEY_CATNAME, parser.getValue(e, KEY_CATNAME));
                map.put(KEY_SUBLTR, parser.getValue(e, KEY_SUBLTR));
                map.put(KEY_SUBNAME, parser.getValue(e, KEY_SUBNAME));
                // adding HashList to ArrayList
                menuItems.add(map);

            }
            makeIt();

            handler.post(new Runnable() {
                public void run() {
                    ringProgressDialog.dismiss();
                };
            });
        }
    };
    t.start();

    // new ProgressTask(AndroidXMLParsingActivity.this).execute();
}

private void makeIt() {

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(this, menuItems,
            R.layout.list_item, new String[] { KEY_NAME, KEY_SUBNAME,
                    KEY_CATNUM }, new int[] { R.id.name, R.id.desciption });

    // setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();
            String description = ((TextView) view
                    .findViewById(R.id.desciption)).getText().toString();
            HashMap<String, String> extractItems = menuItems.get(position);
            String code = extractItems.get(KEY_CODE);
            Toast.makeText(getApplicationContext(), code,
                    Toast.LENGTH_SHORT).show();
            // Starting new intent
            Intent in = new Intent(getApplicationContext(),
                    SingleMenuItemActivity.class);
            in.putExtra(KEY_NAME, name);
            in.putExtra(KEY_SUBNAME, description);
            in.putExtra(KEY_CODE, code);
            startActivity(in);
        }
    });
}
ProgressDialog-ringProgressDialog;
私有处理程序=新处理程序();
私有静态XMLParser;
私有静态字符串xml;
私有静态文档文档;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ringProgressDialog=ProgressDialog.show(显示“请稍候…”),
“啤酒在下载!”,没错);
ringProgressDialog.setCancelable(真);
线程t=新线程(){
公开募捐{
menuItems=newarraylist();
Log.d(“检查人”,“刚进入活动”);
parser=newxmlparser();
xml=parser.getXmlFromUrl(URL);//获取xml
doc=parser.getDoElement(xml);//获取DOM
d(“CHECKER”,“从XML解析元素”);
NodeList nl=doc.getElementsByTagName(键记录);
//循环通过所有项目节点
Log.d(“检查器”,“开始将值逐个输入地图”);
对于(int i=0;ivalue
map.put(KEY_代码,parser.getValue(e,KEY_代码));
put(KEY_NAME,parser.getValue(e,KEY_NAME));
put(KEY_COMPANY,parser.getValue(e,KEY_COMPANY));
put(KEY_CATNUM,parser.getValue(e,KEY_CATNUM));
map.put(KEY_CATNAME,parser.getValue(e,KEY_CATNAME));
put(KEY_SUBLTR,parser.getValue(e,KEY_SUBLTR));
put(KEY_SUBNAME,parser.getValue(e,KEY_SUBNAME));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}
makeIt();
handler.post(新的Runnable(){
公开募捐{
ringProgressDialog.Disclose();
};
});
}
};
t、 start();
//新的ProgressTask(AndroidXMLParsingActivity.this).execute();
}
私有void makeIt(){
//向ListView添加菜单项
ListAdapter=new SimpleAdapter(此,菜单项,
R.layout.list_项,新字符串[]{KEY_名称,KEY_子名称,
KEY_CATNUM},新int[]{R.id.name,R.id.description});
//setListAdapter(适配器);
//选择单个ListView项
ListView lv=getListView();
低压设置适配器(适配器);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//从选定的ListItem获取值
字符串名称=((TextView)view.findViewById(R.id.name))
.getText().toString();
字符串描述=((文本视图)视图
.findViewById(R.id.description)).getText().toString();
HashMap extractItems=menuItems.get(位置);
字符串代码=extractItems.get(键代码);
Toast.makeText(getApplicationContext(),代码,
吐司。长度(短)。show();
//开始新的意图
Intent in=新的Intent(getApplicationContext(),
SingleMenuItemActivity.class);
in.putExtra(键名称、名称);
in.putExtra(关键字子名称、说明);
in.putExtra(键代码,代码);
星触觉(in);
}
});
}

基本上,我希望在提取xml元素、解析值并将其加载到Hashmap中时显示一个对话框,然后希望dialoog消失。

您在单独的线程中设置
ListView
,该线程不更新
ListView
,您需要通过调用它来设置Ui线程中的
ListView
从活动中

示例:

YouActivityName.this.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            makeIt();
            ringProgressDialog.dismiss();

        }
    });

我知道,我试图获取活动的上下文,我使用活动上下文,将其包装并放到一个方法中,然后在线程中获取上下文,但这不起作用。这是可行的!虽然