当前位置: 代码迷 >> Android >> 显示/隐藏自定义列表视图中每个项目的TextView
  详细解决方案

显示/隐藏自定义列表视图中每个项目的TextView

热度:39   发布时间:2023-08-04 11:50:42.0

我有 :

  • 一个自定义的listview项目布局,其中包含一个名为numberViewTextView
  • 一个名为showNumbersItem的可检查选项菜单项

我想将numberView isVisible属性设置为true如果选中了numberView ,否则showNumbersItemfalse

目前,我有以下代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View itemView = convertView;

    if (itemView == null) {
        itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
    }

    TextView numberView = (TextView) itemView.findViewById(R.id.numberView);
    numberView.setText("+33601234567");
    numberView.setEnabled(showNumbers); //showNumbers is a boolean

    return itemView;
}

1.如何在即将填充列表之前将showNumbers布尔值设置为showNumbersItem.isChecked

我尝试使用此代码...:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    return super.onPrepareOptionsMenu(menu);

    showNumbers = menu.findItem(R.id.show_numbers).isChecked();
}

...但是Android Studio说: "Unreachable statement"

2.以及如何为listview中的每个项目设置numberView isVisible属性?

目前,我有以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case (R.id.show_numbers):
            item.setChecked(!item.isChecked());
            showNumbers = item.isChecked();

            //I don't know

            break;
    }
    return super.onOptionsItemSelected(item);
}

对于#1:

选中默认值后,您可以使用true初始化showNumbers布尔值, showNumbers = true;

对于#2:

更改视图可见性:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    .....

    if(showNumbers){
       numberView.setVisibility(View.VISIBLE);
    }else{
       numberView.setVisibility(View.INVISIBLE);
    }
    ....
    return itemView;
}

通知您的列表适配器:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case (R.id.show_numbers):
            item.setChecked(!item.isChecked());
            showNumbers = item.isChecked();

            yourAdapter.notifyDatasetChanged();

            break;
    }
    return super.onOptionsItemSelected(item);
}

首先,您需要将showNumbers变量传递给适配器,并且需要在getView()中添加代码以使视图不可见。 您可能想将“可见性”设置为“消失”。 如果未显示,Invisible将为View事件留出空间。

if(showNumbers)
    numberView.setVisibility(View.VISIBLE);
else
    numberView.setVisibility(View.INVISIBILE);
    // or numberView.setVisibility(View.GONE);

然后,我认为您与onPrepareOptionMenus()没有任何关系。 它告诉您代码不可访问,因为在代码之前有一个return语句。 如果有必要,您应该这样做:

showNumbers = menu.findItem(R.id.show_numbers).isChecked();
return super.onPrepareOptionsMenu(menu);

最后,在onOptionItemSelected()中,您应该在适配器中更改布尔值并调用notifyDatasetChanged():

case (R.id.show_numbers):
    item.setChecked(!item.isChecked());
    showNumbers = item.isChecked();
    yourAdapter.setShowNumbers(showNumbers );
    yourAdapter.notifyDatasetChanged();
    break;

您可能需要在适配器类中为showNumbers添加设置器。

  相关解决方案