как обновить текстовое представление каждую х секунду? - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь напечатать шаги сортировки выбора в текстовом представлении, для этого я хочу использовать каждый метод steptext.append() через каждые 5 секунд.

Я ожидал, что результат будет выглядеть похоже на это

sortSteps

но это не работает, и я получаю это I/Choreographer: Skipped 1084 frames! The application may be doing too much work on its main thread.

    public class steps extends Fragment {
    private static final String ARG_PARAM1 = "inpuut";
    private String minpuut;
    private OnFragmentInteractionListener mListener;

    private TextView inputEntred  ;
    private TextView  steptext ;

    @Override
    public void onResume() {
        super.onResume();
        String[] numberList = inputEntred.getText().toString().split(","); 

        final Integer[] numbers = new Integer[numberList.length];

        for (int i = 0; i < numberList.length; i++) {

            numbers[i] = Integer.parseInt(numberList[i]);
        }
    }

    public static int  Nswaps =0; 

     public String selectionSteps(Integer[] arr) throws InterruptedException {
        System.out.println(Arrays.toString(arr));
        int n = arr.length;
        int Ccounter=0; 

        for (int i = 0; i < n-1; i++)
        {          
            int min_idx = i;    
            for (int j = i+1; j < n; j++)   {
                Ccounter++;                  
             steptext.append(" comparison "+Ccounter +" :  comparing "+ arr[i]+" and "+ arr[j]+" \n");
                Thread.sleep(5000);

                if (arr[j] < arr[min_idx])
                {
                    min_idx = j ;
                    steptext.append( "("+arr[j]+"<"+arr[i] +") TRUE ,  swap positions \n");
                    Thread.sleep(5000);
                    swap(arr,min_idx, i);
                    steptext.append("  swap  : ");
                    steptext.append(Arrays.toString(arr)+"\n");
                    Thread.sleep(5000);
                    }
                else

                steptext.append( "("+arr[j]+"<"+ arr[i]+")   FALSE , no swaping \n");;
                Thread.sleep(5000);

            }
            swap(arr,min_idx, i);
        }

        System.out.println(Ccounter);


        return null;
    }

    public static void swap(Integer[] a, int i, int j) {
        int e = a[i];
        a[i] = a[j];
        a[j] = e;
        Nswaps++ ;
    }
}

извините, мне нужно добавить текст, чтобы мне написать вопрос

1 Ответ

1 голос
/ 14 марта 2020

Вы искали вопрос?

{ ссылка }

Как приостановить / приостановить поток или обработать в Android?

Вы не должны использовать Thread.sleep в android потоке пользовательского интерфейса. Если нужно выполнить тяжелую работу, создайте тему в другом потоке, а когда они закончат, вызовите поток пользовательского интерфейса и обновите текстовые представления.

В вашем случае вы можете использовать что-то вроде этого:

Handler handler = new Handler();
updater = new Runnable() {
    @Override
    public void run() {
        // Do one step of sorting here
        steptext.append("Your swaps steps");
        handler.postDelayed(updater,5000);
            }
    };
handler.post(updater);

Вы можете использовать другой метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...