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

时间:2015-10-24 16:04:43

标签: java android

我有:

  • 自定义列表视图项目布局,其中TextView内有numberView
  • 一个名为showNumbersItem
  • 的可检查选项菜单项

如果选中isVisible,我想将numberView的{​​{1}}属性设置为true,如果没有,则设置为showNumbersItem

目前,我已经有了这段代码:

false

1。如何在填充列表之前将@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; } 布尔设置为showNumbers

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

showNumbersItem.isChecked

...但Android Studio说:@Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); showNumbers = menu.findItem(R.id.show_numbers).isChecked(); }

2。如何为列表视图中的每个项目设置"Unreachable statement" isVisible属性?

目前,我有这段代码:

numberView

2 个答案:

答案 0 :(得分:1)

#1:

选中默认值后,您只需使用showNumberstrue

初始化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);
}

答案 1 :(得分:1)

首先,您需要将showNumbers变量传递给适配器,并且需要在getView()中添加代码以使View不可见。您可能希望将Visibility设置为GONE。如果未显示,则不可见为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的setter。