[英]Dynamically add and hiding textViews
我有“為每個”循環,用於為列表中的每個對象創建textView並將其添加到線性布局。 效果很好。 然后我想在用戶單擊切換按鈕時隱藏所有textView,但是這里我遇到了問題-僅隱藏了列表中的最后一個textView,其余的仍然可見。 我試圖通過許多解決方案來解決此問題(例如,使用getChild()),但是沒有任何效果。
final List<FilterItem> filterItemList = filterData.getFilterItemList();
for (FilterItem filterItem : filterItemList) {
final TextView filter = new TextView(MainPanelActivity.this);
filter.setText(filterItem.getFilterItemName());
filter.setTextColor(R.color.black);
linearLayout.addView(filter);
filter.setVisibility(View.GONE);
textLine.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
filter.setVisibility(View.VISIBLE);
} else {
filter.setVisibility(View.GONE);
}
}
});
請注意,您在for循環內設置了textLine
的偵聽器-因此,對於每次迭代,您都設置了一個新的偵聽器,該偵聽器更改了在當前iteraton中創建的TextView
的可見性。
將textLine.setOnCheckedChangeListener()
for循環之外; 在onCheckedChanged
內部-循環遍歷onCheckedChanged
所有子linearLayout
並設置每個子項的可見性。
textLine.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
for (View v : linearLayout.getChildren()) {
if (v instanceof TextView) {
if (isChecked) {
v.setVisibility(View.VISIBLE);
} else {
v.setVisibility(View.GONE);
}
}
}
創建TextView時,可以保留它們的列表。 然后按照Dmitri所說的,在for循環外設置單擊偵聽器,這將遍歷TextViews列表並將可見性設置為GONE。
private void setup() {
List<View> textViews = new ArrayList<>();
for (FilterItem filterItem : filterData.getFilterItemList()) {
View view = createTextViewFor(filterItem);
linearLayout.addView(filter);
textViews.add(view);
}
updateVisibility(textViews, View.GONE);
textLine.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int visibility = isChecked ? View.VISIBLE : View.GONE;
updateVisibility(textViews, visibility);
}
}
);
}
private View createTextViewFor(FilterItem filterItem) {
TextView view = new TextView(MainPanelActivity.this);
view.setText(filterItem.getFilterItemName());
view.setTextColor(R.color.black);
view.addFilter(filterItem);
return view;
}
private void updateVisibility(List<View> views, int visibility) {
for (View view : views) {
view.setVisibility(visibility);
}
}
如果要動態顯示textView
,我認為將textView
放入RecyclerView
會是一個更好的主意。 RecyclerView
有自己的Adapter
,可以輕松使用data和textViews
。 嘗試一下recyclerView
。 RecycerView
可以讓您在幾小時內了解您要嘗試做的事情,而天空是您使用recyclerView
可以做的事情的極限:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.