Как добавить TextView в ListView в цикле один за другим?

Как добавить TextView в LinerLayout в цикле один за другим? У меня есть цикл объектов, и я хочу во время выполнения цикла добавить TextView в ListView?

И я хочу добавить текст через какой-то промежуток времени! Но с этим кодом появляется через 5 сек и все!

Это то, что я пробовал:

itemList=new ArrayList<String>();
        adapter=new ArrayAdapter<String>(this,R.layout.task_text,R.id.txtview,itemList);
        ListView listV=(ListView)findViewById(R.id.list);
        listV.setAdapter(adapter);


for (final Task task : tasks) {


       for (int j = 0; j < 1; j++) {

       itemList.add(task.getName());

       Handler handler = new Handler();
       handler.postDelayed(new Runnable() {
           public void run() {
                    adapter.notifyDataSetChanged();
                    }
             }, 5000);   //5 seconds

Мой макет

<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
    android:id = "@+id/line_layout"
    xmlns:tools= "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical"
    android:padding = "10dp"
    tools:context = ".TaskActivity"
    >

    <ListView
        android:id = "@+id/list"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content">
    </ListView>
</LinearLayout>

text_layout:

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    android:orientation = "vertical" android:layout_width = "match_parent"
    android:layout_height = "match_parent">
    <TextView
        android:id = "@+id/txtview"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content" />
</LinearLayout>

Полный код действия: https://repl.it/repls/TransparentIntentRelationaldatabase

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте TimerTask для его периодического выполнения.

public class MainActivity1 extends AppCompatActivity  {

  volatile int i = 0; // define as a global variable
  Timer timer; // define as a global variable
  CarerAdapter adapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main1);
    ListView listView = findViewById(R.id.listView);
    final ArrayList<String> tasks = new ArrayList<>();
    tasks.add("111");
    tasks.add("222");
    tasks.add("333");
    tasks.add("444");
    tasks.add("555");
    tasks.add("666");
    final ArrayList<String> itemList = new ArrayList<>();
    adapter = new CarerAdapter(this, R.layout.item, itemList);
    listView.setAdapter(adapter);

    int delay = 5000; // delay for 5 sec.
    int period = 5000; // repeat every 5 secs.
    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {

      public void run() {
        try {
          runOnUiThread(new Runnable() {
            @Override
            public void run() {
              if (i < tasks.size()) {
                itemList.add(tasks.get(i));
                adapter.notifyDataSetChanged();
                i = i + 1;
              }
            }
          });
        } catch (Exception e) {
          e.printStackTrace();
        }
      }

    }, delay, period);
  }


  @Override
  protected void onStop() {
    if (timer != null) {
      timer.cancel();
      timer = null;
    }
    super.onStop();
  }

  public class CarerAdapter extends ArrayAdapter<String> {

    CarerAdapter(@NonNull Context context, int resource, @NonNull List<String> pCarers) {
      super(context, resource, pCarers);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      // inflate the layout for each list row
      if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).
            inflate(R.layout.text_layout, parent, false);
      }

      String currentItem = getItem(position);
      // get the TextView for item name and item description
      TextView textViewItemName = (TextView)
          convertView.findViewById(R.id.txtview);
      //sets the text for item name and item description from the current item object
      textViewItemName.setText(currentItem);
      // returns the view for the current row
      return convertView;
    }

  }

}

Можете ли вы показать, как добавить метод onStop. Где он должен начинаться и заканчиваться?

user11679476 21.06.2019 17:45

Если вы используете это в Activity. пиши туда.

Deˣ 21.06.2019 17:46

Итак, я попробовал ваш код, он сработал, но круг повторился два раза, и это все равно произошло быстро. Как я могу решить проблему?

user11679476 21.06.2019 17:50

интервал = 5000; его 5 секунд. вы можете изменить это. и я проверил это на моем конце. и работает нормально..

Deˣ 21.06.2019 17:53

Он ждет 5 секунд, а затем показывает все сразу. Но я хочу, чтобы они появлялись каждый раз через 1 секунду или около того. Как я могу это сделать?

user11679476 21.06.2019 17:53

Я обновил ответ. Это полный класс и адаптер. Это работает. Вы можете изменить в соответствии с вашими потребностями.

Deˣ 21.06.2019 18:16

Давайте продолжить обсуждение в чате.

user11679476 22.06.2019 14:40

Работает просто идеально! Большое спасибо!

user11679476 24.06.2019 13:17

Другие вопросы по теме