0

セルごとに異なる列幅のテーブルを作成する必要があります。〜20行と60〜80列があります。これが私のコードです:

private void generatingRows() {

    new AsyncTask<Void,View,Void>() {

        private ProgressDialog dialog;
        private int progress = 0;

        @Override
        protected void onPreExecute() {

            // Clear table
            table.removeAllViews();

            // Show peogress dialog
            dialog = new ProgressDialog(MyActivity.this);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMessage("Loading");
            dialog.setCancelable(false);
            dialog.setMax(data.size);
            dialog.setProgress(0);
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {


            for (final RowData rowData : data) {

                // Create row
                LinearLayout row = new LinearLayout(MyActivity.this);
                row.setOrientation(LinearLayout.HORIZONTAL);

                // Add columns
                for (int i = 0; i < rowData.columns.size(); i++) {

                    // Get column values
                    final ColumnData columnData = rowData.columns.get(i);

                    // Get view
                    final View column = layoutInflater.inflate(R.layout.column, null);

                    // Set values
                    MyActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            TextView.class.cast(column.findViewById(R.id.title)).setText(columnData.title);
                        }
                    });

                    // Add into row
                    row.addView(column);
                }

                // Update
                progress++;
                publishProgress(new View[] {channelItem, showRow });

            }

            return null;
        }

        @Override
        protected void onProgressUpdate(View... resultViews){
            dialog.setProgress(progress);
            table.addView(resultViews[0]);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            dialog.dismiss();
        }

    }.execute();

}

「テーブル」ビューは、垂直方向の LinearLayout です。そして問題は、ダイアログが表示されることですが、フリーズし、すべての行ではなく、1回、2回だけ更新されます。もちろん、完全に機能しているよりも onProgressUpdate メソッドで addView をスキップすると、進行状況は継続します。バックグラウンドで行を追加できないので、解決策は何ですか?

4

0 に答える 0