0

我正在尝试构建一个类来访问网络,下载数据然后将其加载到数据库中。使用单个进度对话框执行此操作没有问题,但根本无法弄清楚如何拥有多个对话框。在对此进行研究时,我发现了数百个进度对话框问题,因此它看起来并不像应有的那么简单。

我尝试过使用处理程序和线程,但根本无法使用

我正在寻找一个工作代码的例子来完成这个。

这是我正在尝试的伪代码:

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();
    } } } }
}
4

1 回答 1

2

拥有多个对话框的唯一方法是将它们层叠在一起,这显然是用户体验的禁忌。在android中,对话框是它们自己的窗口,所以一次只能有一个焦点。

要解决您的问题,请创建一个包含多个ProgressBar小部件的自定义对话框。最简单的方法是从 a 开始DialogFragment并覆盖onCreatedDialog()以返回AlertDialog带有自定义视图的 a。要在警报对话框上设置自定义视图,请setView()参阅AlertDialog. 例如,

@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();
}

将所有这些封装到一个多下载进度对话框中会非常简洁,您可以在其中注册其他下载并让该类自动添加进度条并自行注册以进行进度更新。

于 2013-04-05T18:06:25.730 回答