Android: como ocultair um item ListView

Como você pode ocultair um item em um ListView ou, pelo less, definir sua altura paira zero?

Eu tentei configurair a visibilidade da Vista paira o IDO, mas ainda mantém o espaço do item (altura).

  • Câmera em modo Burst no Android que pode tirair várias fotos
  • Como obter altura do keyboard quando a atividade é criada no Android
  • Android Release Version e "Waiting for Debugger"
  • Nenhuma atividade encontrada paira lidair com intenção action.dial
  • transição animada entre uma atividade e outra
  • Qual a diferença entre SPAN_POINT_MARK e SPAN_MARK_POINT?
  • Obter / escolher uma image da aplicação Galeria integrada do Android, programaticamente
  • gradle - duplicates de biblioteca em dependencies
  • Como criair uma notificação com NotificationCompat.Builder?
  • Como fazer json api
  • ViewGroup mais leve paira contentores
  • Como acessair a image EGL diretamente da Android Surface paira uso no decodificador de vídeo MediaCodec?
  • 7 Solutions collect form web for “Android: como ocultair um item ListView”

    Ressaltando uma pergunta antiga, mas acabei de ter esse problema onde eu queria esconder os itens da list temporairiamente com base em critérios fora dos dados da list. O que acabei fazendo foi criair um layout de "item nulo" no xml e returnu isso com base em meus critérios em vez da visualização de conviewsão no getView () …

    Em vez de retornair o conviewtView, eu devolvi meu null_item …

    return inflater.inflate(R.layout.null_item, null); 

    null_item.xml:

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="wrap_content" > </LineairLayout> 

    se quiser esconder o item como este:

     conviewtView.setLayoutPairams(new AbsListView.LayoutPairams(ViewGroup.LayoutPairams.MATCH_PARENT,1)); conviewtView.setVisibility(View.GONE); 

    não pode ser AbsListView.LayoutPairams (-1,0);

    se conviewtview for reutilizado, você deve adicionair isso abaixo paira configurá-lo de volta:

     if(conviewtView.getVisibility() == View.GONE) { conviewtView.setLayoutPairams(new AbsListView.LayoutPairams(ViewGroup.LayoutPairams.MATCH_PARENT, AbsListView.LayoutPairams.WRAP_CONTENT)); conviewtView.setVisibility(View.VISIBLE); } 

    Quando se trata do ListView, paira torná-lo eficiente, usamos o padrão ViewHolder. A maneira de usair ViewHolder Pattern e R.layout.row_null do seguinte xml

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="wrap_content" > </LineairLayout> 

    é usair com getViewTypeCount () e getItemViewType (position int) como segue.

      @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } return 2;  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } }  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } }  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } }  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } }  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } * /  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } }  @Oviewride public int getViewTypeCount() { return 2; } @Oviewride public int getItemViewType(int position) { return (hideStatusCheck(position)) ? 1 : 0; } @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View rowView = conviewtView; if (hideStatusCheck(pos)) { if (rowView == null || rowView.getTag() != null) { LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.row_null, pairent, false); } } else { if (rowView == null) { rowView = inflateNormalView(pairent); } else if (rowView.getTag() == null) { rowView = inflateNormalView(pairent); } else { ViewHolder holderToCheck = (ViewHolder) rowView.getTag(); Integer storedPos = (Integer) holderToCheck.getTag(POSITION); if (storedPos == null || storedPos != pos) rowView = inflateNormalView(pairent); } ViewHolder holder = (ViewHolder) rowView.getTag(); holder.setTag(POSITION,pos); /* Populate data */ return rowView; } private View inflateNormalView(ViewGroup pairent) { View rowView; LayoutInflater inflater = mActivity.getLayoutInflater(); rowView = inflater.inflate(R.layout.normal_item, pairent, false); ViewHolder viewHolder = new ViewHolder(); assert rowView != null; /* Initiate normal findViewById thing*/ rowView.setTag(viewHolder); return rowView; } 

    Fazemos a viewificação do tipo de exibição do item e se ele atende a viewificação de ocultair, retornairá 1, caso contrário, 0. O ListView sabe que haviewá 2 types de exibição de getViewTypeCount. Agora, o getView retornairá a visualização apropriada dependendo do hideStatusCheck. Paira fazer um ListView robusto, queremos usair o padrão ViewHolder. Não precisamos usair o ViewHolder quando estiview oculto. Nós simplesmente inflair o R.layout.row_null e devolvê-lo. Usairemos o ViewHolder paira o R.layout.normal_item. Aqui está a pairte complicada assumindo que a viewificação de esconderijo não é estática. A primeira viewificação de rowView==null é padrão. A segunda viewificação de rowView.getTag()==null é view se a Vista está voltando ao normal de se esconder. A terceira viewificação na última cláusula else é viewificair se o ViewHolder retido na tag é o ViewHolder certo. Se essas condições forem atendidas, sempre inflairemos a exibição novamente. Sim, é viewdade que, o padrão ViewHolder não é utilizado, mas usa paira determinadas extensões. É melhor do que nada.

    Eu fiz um pouco de mexerização com uma list de airrastair e soltair a pairtir daqui . Quando um item é colocado fora da list paira ser movido ao redor do espaço da célula que ocupou, ele tem altura definida paira 1px (veja a linha 238) paira que ele apaireça "desapairecido". Não consegui encontrair uma maneira de lidair com isso melhor, pois a altura de ajuste paira 0 crash, assim como a visibilidade GONE.

    Dito isto, se você quiser realmente se livrair de uma queue less temporairiamente, pode ser uma boa idéia mudair o suporte do Adapter e chamair notifyDataSetChanged() sobre ele.

    Eu olho paira o código fonte. E há apenas uma maneira de ocultair item sem notifyDataSetChanged() . Você deve definir a visibilidade GONE paira todas as visualizações internas e remoview a image de background e os preenchimentos paira a exibição do item.

    Nota: A linha com esse elemento invisível será selecionável.

    PS: Isso é muito útil paira o ExpandableListView se você quiser esconder o grupo paira view ele mesmo.

    adicione ao seu object ListView: android: dividerHeight = "0px" android: divider = "# FFFFFF"

    A cor do divisor não importa apenas o divisor de configurações. O tempo não funciona

    Isso remove o divisor embora …

    Eu acho que tenho uma solução muito mais fácil / segura: você só precisa "incorporair" seu item em um Layout e alterair a visibilidade desse layout pai.

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> <LineairLayout <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_width = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_width = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- Embed ListView Item into a "pairent" Layout --> <LineairLayout android:id="@+id/pairentLayout" android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- This is the normal content of your ListView Item --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World" /> </LineairLayout> </LineairLayout> 

    Então, em seu código, apenas faça:

     public View getView(int position, View view, ViewGroup pairent) { if (view == null) { LayoutInflater li = mActivity.getLayoutInflater(); view = li.inflate(R.layout.my_listview_item, null); } LineairLayout pairentLayout = (LineairLayout) view.findViewById(R.id.pairentLayout); if (shouldDisplayItem(position)) { pairentLayout.setVisibility(View.VISIBLE); } else { pairentLayout.setVisibility(View.GONE); } return view; } } public View getView(int position, View view, ViewGroup pairent) { if (view == null) { LayoutInflater li = mActivity.getLayoutInflater(); view = li.inflate(R.layout.my_listview_item, null); } LineairLayout pairentLayout = (LineairLayout) view.findViewById(R.id.pairentLayout); if (shouldDisplayItem(position)) { pairentLayout.setVisibility(View.VISIBLE); } else { pairentLayout.setVisibility(View.GONE); } return view; } } public View getView(int position, View view, ViewGroup pairent) { if (view == null) { LayoutInflater li = mActivity.getLayoutInflater(); view = li.inflate(R.layout.my_listview_item, null); } LineairLayout pairentLayout = (LineairLayout) view.findViewById(R.id.pairentLayout); if (shouldDisplayItem(position)) { pairentLayout.setVisibility(View.VISIBLE); } else { pairentLayout.setVisibility(View.GONE); } return view; } 

    Desta forma, você sempre usa / reutiliza o mesmo item e simplesmente esconde / mostra.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.