Domanda

Mi sento un po 'stupido perché non riesco a trovare la risposta a questa domanda, il che mi fa pensare che in realtà sto facendo la domanda sbagliata .Tuttavia, ecco qui ...

Ho una visualizzazione elenco e un elemento listview definito in xml, con un paio di campi, niente di speciale.Tutto impostato su visibile.

Quindi mi collego al mio ListView utilizzando un ArrayAdapter personalizzato e desidero nascondere una delle mie visualizzazioni di testo, sulla riga 5. Tuttavia, sembra nascondere il mio TextView sull'elemento 0 e sull'elemento 5. Che cosa è un po 'strano?Ho semplificato il codice, per riprodurre il problema e spero che qualcuno possa aiutarmi ...

Il mio adattatore

public class MenuScreenAdapter extends ArrayAdapter<String>
{
    private List<String> _items;
    private Context _context;

    public MenuScreenAdapter(Context context, List<String> items)
    {
        super(context, R.layout.list_menu_item, items);

        _context = context;
        _items = items;
    }

    private MenuScreenAdapter(Context context, int textViewResourceId)
    {
        super(context, textViewResourceId); 
    }

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

        if (v == null)
        {
            LayoutInflater vi = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.list_menu_item, null);
        }
        String o = _items.get(position);    
        if (o != null)
        {
            TextView tt = (TextView) v.findViewById(R.id.list_menu_item_name);
            if (tt != null)
                tt.setText(o);

            if (position == 5)
                tt.setVisibility(View.GONE);
        }
        return v;
    }
}

Il mio codice vincolante

    // Load everything up that we need
    List<String> items = new ArrayList<String>();
    items.add("One");
    items.add("Two");
    items.add("Three");
    items.add("Four");
    items.add("Five");
    items.add("Six");
    items.add("Seven");
    items.add("Eight");
    items.add("Nine");
    items.add("Ten");

    // Get the ListView, and set it's adapter. The HomeScreenAdapter
    // takes care of the rest
    ListView homeScreenListView = (ListView) _mainActivity.findViewById(R.id.view_home_list);
    homeScreenListView.setOnItemClickListener(ItemSelected);
    homeScreenListView.setAdapter(new MenuScreenAdapter(_mainActivity.getBaseContext(), items));

Grazie in anticipo!

È stato utile?

Soluzione

Poiché le visualizzazioni di riga vengono riutilizzate da ArrayAdapter, una volta impostato View.GONE, passerà alla riga successiva, dove verrà riutilizzata questa visualizzazione.Nel tuo caso, hai impostato View.GONE su textview nella quinta riga, hai spostato un po 'l'elenco e arrayadapter ha deciso di riutilizzare il layout della quinta riga per visualizzare la prima riga, poiché non sono state apportate modifiche, textView rimane ancora nascosto.

Esegui semplicemente:

if (position == 5) {
            tt.setVisibility(View.GONE);
} else {
            tt.setVisibility(View.VISIBLE);
}

P.S.Se non l'hai ancora fatto, guarda una presentazione su ListViews da Google.Tonnellate di informazioni utili lì. ListViews

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top