Объявить несколько представлений с похожим именем (Android Studio)

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Я хочу объявить и скрыть некоторые представления в activity, но это слишком сложно и отнимает много времени. Могу ли я сделать это с помощью цикла или чего-то еще?

 //Startup
    //Hide msgs
    CardView msgUser1v = (CardView) findViewById(R.id.msgUser1v);
    msgUser1v.setVisibility(View.GONE);
    CardView msgBot1v = (CardView) findViewById(R.id.msgBot1v);
    msgBot1v.setVisibility(View.GONE);
    CardView msgUser2v = (CardView) findViewById(R.id.msgUser2v);
    msgUser2v.setVisibility(View.GONE);
    CardView msgBot2v = (CardView) findViewById(R.id.msgBot2v);
    msgBot2v.setVisibility(View.GONE);
    CardView msgUser3v = (CardView) findViewById(R.id.msgUser3v);
    msgUser3v.setVisibility(View.GONE);
    CardView msgBot3v = (CardView) findViewById(R.id.msgBot3v);
    msgBot3v.setVisibility(View.GONE);
    CardView msgUser4v = (CardView) findViewById(R.id.msgUser4v);
    msgUser4v.setVisibility(View.GONE);
    CardView msgBot4v = (CardView) findViewById(R.id.msgBot4v);
    msgBot4v.setVisibility(View.GONE);
    CardView msgUser5v = (CardView) findViewById(R.id.msgUser5v);
    msgUser5v.setVisibility(View.GONE);
    CardView msgBot5v = (CardView) findViewById(R.id.msgBot5v);
    msgBot5v.setVisibility(View.GONE);
  

Ответ №1:

Я думаю, что это будет хорошим способом сделать это:

 List<CardView> cards = new ArrayList<CardView>();
for (int i = 1 ; i <= cardsCount ; i  )
{
    int id = getResources().getIdentifier("msgBot" i "v", "id", context.getPackageName());
    cards.add((CardView) findViewById(id));
}
  

Теперь у вас есть все ваши представления card в cards array.
Если вы хотите сделать их невидимыми, вы можете сделать это легко следующим образом:

 for(CardView c : cards){
    c.setVisibility(View.INVISIBLE);
}
  

Комментарии:

1. ‘для(CardView c: cards){ cards.setVisibility(Просмотр. НЕВИДИМЫЙ); }’

Ответ №2:

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

 int childs = relativeLayout.getChildCount(); 
for(int i=0; i<childs; i  ){
    View child = relativeLayout.getChildAt(i);
     if(child instanceOf CardView){
             child.setVisibility(View.GONE);
     }
}
  

вы можете дополнительно установить дополнительные проверки условий, чтобы исключить определенные представления карты.

если CardViews это единственный элемент в вашем контейнере, и вы хотите скрыть их все, то вы можете просто установить видимость родительского макета.

relativeLayout.setVisibility(View.GONE);