Прогрессбар в течение цикла - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь этот код, но только 3-й индикатор прогресса обновлен.я хочу знать, в чем моя ошибка в коде?

package com.yasi.testview;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;



public class MainActivity extends AppCompatActivity {
    LayoutInflater inflater;
LinearLayout scrollContent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        scrollContent = findViewById(R.id.scrollContent);

        for (int i=1; i<4; i++){
            View view = inflater.inflate(R.layout.test_item,scrollContent);
            ProgressBar progressBar = findViewById(R.id.prgDownload);
            TextView textView = findViewById(R.id.txtDownload);

            progressBar.setProgress((int) (Math.random() * 100));
            textView.setText("Download # " + i);

        }


    }
}

, и это фотография моего проекта: Снимок экрана проекта

в основном вид прокруткимакет активности по этому коду:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/scrollContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

        </LinearLayout>
    </ScrollView>
</android.support.constraint.ConstraintLayout>

и мой макет test_item - это код ниже, который содержит индикатор выполнения и текстовое представление:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/prgDownload"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/txtDownload"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="..." />
</RelativeLayout>

спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Объявите виджеты-представления вне цикла и используйте этот код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.test_item, scrollContent);

    scrollContent = findViewById(R.id.scrollContent);
    ProgressBar progressBar = findViewById(R.id.prgDownload);
    TextView textView = findViewById(R.id.txtDownload);

    for (int i=0; i < 3; i++){

            progressBar.setProgress((int) (Math.random() * 100));
            textView.setText("Download # " + i);

        }

   }

Как видите, вы вносите изменения только в ProgressBar с prgDownload idИтак, вам, вероятно, потребуется объявить больше ProgressBar с в вашем проекте .

Редактировать:

Чтобы показать ProgressBar программно, используйте это:

progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleSmall);

Вы можете использовать это внутри цикла for для трех элементов, но способ, которым вы пытаетесь показать внутри цикла , не рекомендуется .

0 голосов
/ 24 сентября 2018

Во-первых, не получайте новые экземпляры элементов в цикле снова и снова, это плохой подход, как разрешено в фрагменте ниже, во-вторых, вы просто используете один индикатор прогресса снова и снова и обновляете его в том же потоке,Вам нужно иметь больше индикаторов прогресса в XML, а также вы можете генерировать динамически, а затем вы можете запустить цикл и соответственно обновить.

package com.yasi.testview;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;



public class MainActivity extends AppCompatActivity {
    LayoutInflater inflater;
    LinearLayout scrollContent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        **View view = inflater.inflate(R.layout.test_item,scrollContent);
        ProgressBar progressBar = findViewById(R.id.prgDownload);
        TextView textView = findViewById(R.id.txtDownload);**
        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        scrollContent = findViewById(R.id.scrollContent);

        for (int i=1; i<4; i++){
            progressBar.setProgress((int) (Math.random() * 100));
            textView.setText("Download # " + i);

        }


    }
}
...