Как удалить пробел из списка, соответствующего адаптеру, когда я применяю функцию setVisible (View.gone) к адаптеру?

Я пытаюсь скрыть адаптер, когда мой объект "TuMesaModel" является администратором, это код

public class TuMesaAdapter extends ArrayAdapter<TuMesaModel>{
    private String _id;

    public TuMesaAdapter(Context context, List<TuMesaModel> objects, String id) {
        super(context, 0, objects);
        _id = id;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent){
        ViewHolder holder = null;
        TuMesaModel entry = getItem(position);
        String numero = "+"+entry.getUsername();
        //Toast.makeText(getContext(), Settings.PREFERENCES.getString(Settings.PHONE_PREF, null), Toast.LENGTH_LONG).show();

        if(convertView == null){
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.tumesa_user, parent, false);
            holder = new ViewHolder();
            holder.numero_personal_tu_mesa = (TextView) convertView.findViewById(R.id.numero_personal_tu_mesa);
            holder.aceptar_y_rechazar_tu_mesa = (LinearLayout) convertView.findViewById(R.id.aceptar_y_rechazar_tu_mesa);
            holder.foto_perfil_tu_mesa = (ImageView) convertView.findViewById(R.id.foto_perfil_tu_mesa);
            holder.mRelative = convertView.findViewById(R.id.layout_tu_mesa);
            Utils.setFontAllView((ViewGroup) holder.mRelative);
            convertView.setTag(holder);

        }else{
            holder =  (ViewHolder) convertView.getTag();
        }

        holder.numero_personal_tu_mesa.setText(entry.getUsername());

        if(!entry.isAdmin()){
            holder.mRelative.setVisibility(View.GONE);
            //Toast.makeText(getContext(), Settings.PREFERENCES.getString(Settings.PHONE_PREF, null), Toast.LENGTH_LONG).show();
            //Toast.makeText(getContext(), "Luego:"+numero, Toast.LENGTH_LONG).show();
        }
        return convertView;

    }

    private static class ViewHolder {
        public View mRelative;
        public TextView numero_personal_tu_mesa;
        public LinearLayout aceptar_y_rechazar_tu_mesa;
        public ImageView foto_perfil_tu_mesa;

    }

}

В основномАктивность

        Type collectionMesa = new TypeToken<Collection<TuMesaModel>>() {}.getType();
        _response = new Gson().fromJson(reader, collectionMesa);
        Log.i("Tamaño response TuMesaActivity", _response.size()+"");
        return null;
    }

    @Override
    protected void onPostExecute(Void Void) {
        super.onPostExecute(Void);
        setSupportProgressBarIndeterminateVisibility(false);
        _mesa_adapter = new TuMesaAdapter(TuMesaActivity.this, _response, _bundle.getString("_id"));
        _list_view.setAdapter(_mesa_adapter);
        _mesa_adapter.notifyDataSetChanged();


    }

Но когда я запускаю функцию setVisible (View.Gone), в списке появляется пробел, соответствующий адаптеру. Что я могу сделать, чтобы удалить это пространство ??


person TuGordoBello    schedule 18.02.2014    source источник
comment
ваш вопрос не ясен, вы не прячете переходник   -  person tyczj    schedule 18.02.2014
comment
Почему бы вам не удалить эти объекты из списка перед созданием адаптера? Это самый простой (и самый элегантный) способ сделать это.   -  person Flávio Faria    schedule 18.02.2014
comment
@tyczj Я меняю вопрос: D   -  person TuGordoBello    schedule 18.02.2014
comment
Просто отфильтруйте список в конструкторе   -  person    schedule 18.02.2014
comment
@zhelon смотри мой ответ   -  person    schedule 18.02.2014


Ответы (3)


Если вы хотите удалить все данные из списка, передайте пустой список и выполните следующие вызовы, как вы делали ранее.

_mesa_adapter = new TuMesaAdapter(TuMesaActivity.this, _response, _bundle.getString("_id"));
_list_view.setAdapter(_mesa_adapter);
_mesa_adapter.notifyDataSetChanged();

или вы также можете попробовать установить для адаптера списка значение null as,

_list_view.setAdapter(null);    

Дайте мне знать, если это поможет. :)

person Atul O Holic    schedule 18.02.2014
comment
если использовать setVisible(View.Gone) для адаптера, в списке будет место, соответствующее адаптеру, который я просто скрываю, мне не нужно удалять все остальные адаптеры, потому что я их не скрывал, ахаха - person TuGordoBello; 18.02.2014
comment
Хорошо, теперь я понял. Вы устанавливаете View.Gone в свой LinearLayout (aceptar_y_rechazar_tu_mesa), который, как я полагаю, является родителем всех ваших элементов Row? - person Atul O Holic; 18.02.2014
comment
Кроме того, я нашел это. stackoverflow.com /questions/2638160/, где мы возвращаем нулевой макет вместо convertView всякий раз, когда вы хотите скрыть элемент списка. - person Atul O Holic; 18.02.2014

Вы не можете сделать это в чистом виде. Вы должны удалить записи, не являющиеся администраторами, из своего списка или создать список без этих записей и позвонить notifyDataSetChanged.

person znat    schedule 18.02.2014
comment
Да, мужчины, я согласен с этим, но в классе адаптера, если я сделаю следующее if(!entry.isAdmin()){ convertView = null //Is Admin }else{ //Is not admin // set adapter } программа выйдет из строя потому что попробуй поставить нулевой адаптер =/ - person TuGordoBello; 18.02.2014

Просто отфильтруйте список в конструкторе, примерно так:

public TuMesaAdapter(Context context, List<TuMesaModel> objects, String id) {
    super(context, 0);
    final List<TuMesaModel> filtered = new ArrayList<TuMesaModel>();
    for(final TuMesaModel object : objects) {
        if(!object.isAdmin()){
            filtered.add(object);
        }
    }
    addAll(filtered);
    _id = id;
}

см. ArrayAdapter#addAll (начиная с уровня API 11)

person Community    schedule 18.02.2014
comment
привычки, final значит не переназначит - person ; 19.02.2014