Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态添加和隐藏文本视图_Android_Textview - Fatal编程技术网

Android 动态添加和隐藏文本视图

Android 动态添加和隐藏文本视图,android,textview,Android,Textview,我有一个“for each”循环,它为列表中的每个对象创建textView,并将它们添加到线性布局中。它工作得很好。然后,当用户单击切换按钮时,我想隐藏所有的文本视图,但这里我遇到了问题-只有列表中的最后一个文本视图被隐藏,其余的仍然可见。我尝试用许多解决方案(例如getChild())来解决这个问题,但都没有效果 final List<FilterItem> filterItemList = filterData.getFilterItemList(); for (FilterIt

我有一个“for each”循环,它为列表中的每个对象创建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);             
                    }
                }
    });
最终列表filterItemList=filterData.getFilterItemList();
用于(FilterItem FilterItem:filterItemList){
最终文本视图过滤器=新文本视图(MainPanelActivity.this);
filter.setText(filterItem.getFilterItemName());
filter.setTextColor(R.color.black);
linearLayout.addView(过滤器);
filter.setVisibility(View.GONE);
textLine.setOnCheckedChangeListener(
新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
filter.setVisibility(View.VISIBLE);
}否则{
filter.setVisibility(View.GONE);
}
}
});

请注意,您正在for循环中为
textLine
设置一个侦听器-因此,对于每次迭代,您都会设置一个新的侦听器,以更改在当前迭代中创建的
TextView
的可见性

textLine.setOnCheckedChangeListener()
移动到for循环外部;将
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);                
                            }
                        }
                    }

请注意,您正在for循环中为
textLine
设置一个侦听器-因此,对于每次迭代,您都会设置一个新的侦听器,以更改在当前迭代中创建的
TextView
的可见性

textLine.setOnCheckedChangeListener()
移动到for循环外部;将
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
,我想把
textView
放在
RecyclerView
里面会更好。
RecyclerView
有自己的
Adapter
,这将使数据和
textView
更容易播放。试试
RecycerView
e> 因为你想做的事情可以在几个小时内学会,天空是你能用
recyclerView
做的极限:)

如果你想动态显示
textView
,我想把
textView
放在
recyclerView
里面会是个更好的主意。
recyclerView
有自己的
适配器
这将使数据和
文本视图的使用变得更加容易。
请尝试一下
RecycerView
RecycerView
因为您要做的事情可以在几个小时内学会,sky是您可以使用
recyclerView
:)进行操作的限制。

您可以在创建文本视图时保留一个列表。然后设置如Dmitri所说,在for循环外单击listener,它将遍历TextView列表并将可见性设置为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);
    }
}
private void setup(){
列表文本视图=新建ArrayList();
对于(FilterItem FilterItem:filterData.getFilterItemList()){
视图=createTextViewFor(filterItem);
linearLayout.addView(过滤器);
textViews.add(视图);
}
可更新性(TextView、View.GONE);
textLine.setOnCheckedChangeListener(
新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
int visibility=isChecked?View.VISIBLE:View.GONE;
可更新性(文本视图、可见性);
}
}
);
}
私有视图createTextViewFor(FilterItem FilterItem){
TextView视图=新的TextView(MainPanelActivity.this);
view.setText(filterItem.getFilterItemName());
view.setTextColor(R.color.black);
view.addFilter(filterItem);
返回视图;
}
私有void可更新性(列表视图、int可见性){
用于(视图:视图){
视图。设置可见性(可见性);
}
}

您可以在创建文本视图时保留它们的列表。然后按照Dmitri所说,在for循环外设置click listener,这将遍历文本视图列表,并将可见性设置为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);
    }
}
private void setup(){
列表文本视图=新建ArrayList();
对于(FilterItem FilterItem:filterData.getFilterItemList()){
视图=createTextViewFor(filterItem);
linearLayout.addView(过滤器);
textViews.add(视图);
}
可更新性(TextView、View.GONE);
textLine.setOnCheckedChangeListener(
新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
int visibility=isChecked?View.VISIBLE:View.GONE;
可更新性(文本视图、可见性);
}
}
);
}
私有视图createTextViewFor(FilterItem FilterItem){
TextView视图=新的TextView(MainPanelActivity.this);
view.setText(filterItem.getFilterItemName());
view.setTextColor(R.color.black);
view.addFilter(filterItem);
返回视图;
}
私有void可更新性(列表视图、int可见性){
用于(视图:视图){
视图。设置可见性(可见性);
}
}
filter.setVisibility(View.VISIBLE);将为您提供上一个文本视图的引用。这就是它仅隐藏上一个文本视图的原因不完全是:)我在应用程序的另一部分中这样使用它,并且工作正常-隐藏每个文本视图:)filter.setV