addView в исполняемом android - PullRequest
0 голосов
/ 18 июня 2020

У меня есть код, который создает матрицу EditTexts. Код показан ниже. Пока идет процесс создания EditTexts, я хотел бы видеть, как идет этот процесс. Поэтому я поместил индикатор выполнения внизу. Раньше я использовал потоки для работы с индикаторами выполнения (я использовал Runnable), но как только я пытаюсь добавитьView из Runnable, программа вылетает с ошибкой: «Только исходный поток, создавший иерархию представлений, может коснуться свои взгляды ". Как я могу решить эту проблему? Как я могу создать матрицу editTexts с указанием прогресса в индикаторе выполнения? Заранее благодарим за любую подсказку.

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

    ProgressBar progress;
    Button button;

    EditText editText_array[] = new EditText[500];
    ConstraintLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progress = findViewById(R.id.progressBar);
        button = findViewById(R.id.button);

        View.OnClickListener onClickListener_button = new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onClick(View v) {

                int stoop = 1;
                button.setVisibility(View.INVISIBLE);
                layout = findViewById(R.id.layout);

                int x;
                int y;

                int i;
                i=0;

                progress.setMax(400);

                ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);

                for (x=0; x<=1000; x=x + 50 ){
                    for (y=0; y<= 1200; y=y+60){
                        i++;
                        editText_array[i] = new EditText(MainActivity.this);
                        editText_array[i].setLayoutParams(params);
                        editText_array[i].setX(x);
                        editText_array[i].setY(y);
                        editText_array[i].setText(""+0);
                        layout.addView(editText_array[i]);
                        progress.setProgress(i);
                    }
                }
            }
        };

        button.setOnClickListener(onClickListener_button);

    }
}

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="347dp"
        android:layout_height="24dp"
        android:layout_marginStart="32dp"
        android:layout_marginLeft="32dp"
        android:layout_marginBottom="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

...