簡體   English   中英

動態添加和隱藏textViews

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM