Android ListActivity不显示列表
我有一个LIstActivity,它使用URL在线从xml文件加载一个列表,但是LIstActivity只有在没有使用可运行对象或线程的情况下才能成功加载,如果我使用一个进度环并首先在线程中启动该环,或者先在可运行中启动该环,然后进度环显示并完成其工作,但我只获得ListActivities标题,但没有ListActivity的列表或主体 以下是我的代码:Android ListActivity不显示列表,android,android-listview,progressdialog,Android,Android Listview,Progressdialog,我有一个LIstActivity,它使用URL在线从xml文件加载一个列表,但是LIstActivity只有在没有使用可运行对象或线程的情况下才能成功加载,如果我使用一个进度环并首先在线程中启动该环,或者先在可运行中启动该环,然后进度环显示并完成其工作,但我只获得ListActivities标题,但没有ListActivity的列表或主体 以下是我的代码: ProgressDialog ringProgressDialog; private Handler handler = new Handl
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();
}
});
我知道,我试图获取活动的上下文,我使用活动上下文,将其包装并放到一个方法中,然后在线程中获取上下文,但这不起作用。这是可行的!虽然