Есть ли способ изменить все TextViews в Android?

Я пытаюсь сделать свой textView невидимым в течение 4 секунд, а затем появиться после использования кода:

final TextView textView233 = findViewById(R.id.textView233);
    textView233.setText("Loading data...");
    textView233.setVisibility(View.VISIBLE);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            textView233.setVisibility(View.INVISIBLE);
        }
    }, 4000);

В ситуации, когда у меня более 100 текстовых представлений в моей деятельности, и я хочу, чтобы ВСЕ текстовые представления делали то же самое, есть ли способ применить его ко всем текстовым представлениям, кроме написания кода для всех 100 из них? Любая помощь будет оценена, спасибо!


person Kevin    schedule 08.08.2020    source источник
comment
Используйте Array из TextView   -  person Vishnu    schedule 08.08.2020


Ответы (3)


добавьте все эти TextView внутри некоторого LinearLayout и скройте макет LinearLayout после данного внутреннего вместо того, чтобы скрывать каждый TextView отдельно.

person vikas kumar    schedule 08.08.2020
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. – Из обзора - person Andrii Omelchenko; 08.08.2020

Вы можете сделать это с помощью пользовательского класса:

AnimationTextView.java

import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;

public class AnimTextView {

private ArrayList<TextView> textViewList;

public AnimTextView(TextView ... textViews) {
    textViewList = new ArrayList<>();
    textViewList.addAll(Arrays.asList(textViews));
}

public void startLoading(){
    for (final TextView textView: textViewList) {
        textView.setText("Loading data...");
        textView.setVisibility(View.VISIBLE);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                textView.setVisibility(View.INVISIBLE);
            }
        }, 4000);
    }
}
}

Теперь в вашей основной деятельности:

AnimTextView animTextView = new AnimTextView(textView1, textView2, textView3, textView4, ...);

И когда вам нужно начать загрузку:

animTextView.startLoading();
person Shubham Gupta    schedule 08.08.2020

Вот функция, которая получит все TextViews Activity (даже вложенные) и скроется, вы можете вызвать ее из своего Handler:

fun recursiveHideTextAllViews(parent: ViewGroup?) {
    for (i in 0 until parent!!.childCount) {
        val child: View? = parent.getChildAt(i)
        if (child is ViewGroup) {
            recursiveHideTextAllViews(child as ViewGroup?)
        } else if (child!!.javaClass == AppCompatTextView::class.java) {
            child.visibility = View.INVISIBLE;
        }
    }
}

parent — ваше корневое представление.

person Misha Akopov    schedule 08.08.2020