cap*_*oid 78 multithreading android progressdialog
我有一个EditText,它从用户和searchButton获取一个String.单击searchButton时,它将搜索XML文件并将其显示在ListView中.
我能够从用户那里获取输入,搜索XML文件并在ListView中显示用户搜索的值.
我想要的是ProgressDialog在点击searchButton之后显示一个像"请等待...检索数据......"之类的东西,并在显示数据时将其关闭.
public class Tab1Activity extends ListActivity {
private Button okButton;
private Button searchButton;
Toast toast;
String xml;
private TextView searchText;
private String searchTextString;
HashMap<String, String> o;
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);
searchButton = (Button) findViewById(R.id.search_button);
searchButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.print("hello");
searchText = (TextView) findViewById(R.id.search_text);
searchTextString = searchText.getText().toString();
readXml(searchTextString);
}
});
}
private void readXml(String searchTextString1) {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
String xml = XMLfunctions.getXML();
//Here XMLfunctions is class name which parse xml
Document doc = XMLfunctions.XMLfromString(xml);
int numResults = XMLfunctions.numResults(doc);
if ((numResults <= 0)) {
Toast.makeText(Tab1Activity.this, "Testing xmlparser",
Toast.LENGTH_LONG).show();
finish();
}
NodeList nodes = doc.getElementsByTagName("result");
for (int i = 0; i < nodes.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nodes.item(i);
String nameMapString = XMLfunctions.getValue(e, "name");
if ( nameMapString.toLowerCase().indexOf(searchTextString1.toLowerCase()) != -1 ) // != -1 means string is present in the search string
{
map.put("id", XMLfunctions.getValue(e, "id"));
map.put("name", XMLfunctions.getValue(e, "name"));
map.put("Score", XMLfunctions.getValue(e, "score"));
mylist.add(map);
}
}
ListAdapter adapter = new SimpleAdapter(this, mylist,
R.layout.parsexml, new String[] { "name", "Score" }, new int[] {
R.id.item_title, R.id.item_subtitle });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) lv
.getItemAtPosition(position);
Toast.makeText(Tab1Activity.this,
"Name "+o.get("name")+" Clicked", Toast.LENGTH_LONG)
.show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
dld*_*dnh 265
声明进度对话框:
ProgressDialog progress;
Run Code Online (Sandbox Code Playgroud)
当您准备好开始进度对话框时:
progress = ProgressDialog.show(this, "dialog title",
"dialog message", true);
Run Code Online (Sandbox Code Playgroud)
当你完成后让它消失:
progress.dismiss();
Run Code Online (Sandbox Code Playgroud)
这里有一个小线程示例:
// Note: declare ProgressDialog progress as a field in your class.
progress = ProgressDialog.show(this, "dialog title",
"dialog message", true);
new Thread(new Runnable() {
@Override
public void run()
{
// do the thing that takes a long time
runOnUiThread(new Runnable() {
@Override
public void run()
{
progress.dismiss();
}
});
}
}).start();
Run Code Online (Sandbox Code Playgroud)
我在我目前的一个项目中使用以下代码,我从互联网上下载数据.这都在我的活动课中.
// ---------------------------- START DownloadFileAsync // -----------------------//
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// DIALOG_DOWNLOAD_PROGRESS is defined as 0 at start of class
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... urls) {
try {
String xmlUrl = urls[0];
URL u = new URL(xmlUrl);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
int lengthOfFile = c.getContentLength();
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
long total = 0;
while ((len1 = in.read(buffer)) > 0) {
total += len1; // total = total + len1
publishProgress("" + (int) ((total * 100) / lengthOfFile));
xmlContent += buffer;
}
} catch (Exception e) {
Log.d("Downloader", e.getMessage());
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC", progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Retrieving latest announcements...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在为进度条创建对象时,请检查以下内容.
这失败了:
dialog = new ProgressDialog(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
在添加活动上下文时工作..
dialog = new ProgressDialog(MainActivity.this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205380 次 |
| 最近记录: |