#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);