我正在尝试构建一个类来访问Web,下载数据然后将其加载到数据库中。使用单个进度对话框执行此操作我没有问题,但可能根本无法弄清楚如何使用多个对话框。在研究这个问题时,我发现了数百个进度对话问题,因此它看起来并不像应该的那样直接。
我尝试过使用处理程序和线程,但根本无法使用
我正在寻找一个实现此目的的代码示例。
这是我正在尝试的伪代码:
public class myactivity extends Activity()
{
private WebIO webIO ; // web acess io
private DataIO DataIO ; // database io
public void onCreate( Bundle savedInstanceState ) {
DataIO = new DataIO( this );
WebIO = new WebIO();
DataIO.open();
runProgram();
}
}
private void runProgram() {
startProgressDialog( "Downloading data from web" );
new Thread() {
public void run() {
try{
String vData = webIO.getData();
dismissProgressDialog();
if ( vData.length() > 0 ) {
promptUser( vData );
} } } }
}
private void promptUser( vData ){
if alertdialog_to_prompt_user_to_load(){
{
loadData( pData )
}
private void loadData( String pData ){
startProgressDialog( "Loading data into database" );
new Thread() {
public void run() {
try{
loadDataIntoDatabase();
dismissProgressDialog();
} } } }
}
答案 0 :(得分:2)
拥有多个对话框的唯一方法是将它们叠加在一起,这是一个明显的用户体验,禁忌。在android中,对话框是他们自己的窗口,因此一次只能有一个焦点。
要解决您的问题,请使用多个ProgressBar
小部件创建自定义对话框。最简单的方法是从DialogFragment
开始并覆盖onCreatedDialog()
以返回带有自定义视图的AlertDialog
。要在警报对话框中设置自定义视图,请参阅AlertDialog
上的setView()
方法。如,
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater li = LayoutInflater.from(context);
View layout = = li.inflate(R.layout.my_dialog);
return new AlertDialog.Builder(getActivity())
.setIcon(..)
.setTitle(...)
.setView(layout)
...
.create();
}
将所有这些封装到一个多下载进度对话框中非常简洁,您可以在其中注册其他下载并让该类自动添加进度条并注册自己以进行进度更新。