Domanda

Ho creato un controllo composto che sto riutilizzando in più attività. Questo controllo contiene un grappolo di testo e pulsanti, e soprattutto una mailview. Definisco XML in un file di layout e nel costruttore a questo controllo composto, gonfia l'XML come tale:

    String service = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(service);
    inflater.inflate(R.layout.map_menu, this, true);
.

Il layout XML contiene un ListView e anche nel costruttore Questo controllo composto gestirà la configurazione dell'adattatore (il mio adattatore estende l'arrayadapter) e l'array per questo, come:

    ListView tableOfContentsList = (ListView) findViewById(R.id.tocListView);
    _layerAdapter = new LayerAdapter(context, R.layout.toc_layer_item, _layers);
    tableOfContentsList.setAdapter(_layerAdapter);
.

Questo controllo composto viene utilizzato in due Attività: una di queste attività chiama un'altra. Nessuna relazione tra le due attività è intesa.

Ecco il mio problema. Quando il controllo composto viene creato nell'attività iniziale, il codice sopra riportato viene chiamato per impostare l'adattatore di questo controllo. Quindi, quando viene creata e navigata la seconda attività, il costruttore viene chiamato nuovamente su questa seconda istanza del controllo. Questo sembra avere un effetto collaterale sul primo controllo situato nell'attività iniziale. Il secondo controllo sembra sovrascrivere parti dell'adattatore dal primo controllo - perché fondamentalmente il primo adattatore non sarà funzionale una volta chiamato il costruttore al secondo controllo.

È la mia ipotesi che dal momento che faccio riferimento all'ID risorsa della ListView in entrambi i controlli, Android sta rimuovendo l'adattatore dal primo elenco quando viene creato il secondo ListView - perché vede entrambe le Listviews come avere lo stesso ID risorsa? È possibile?

Ho avuto problemi prima in questo esatto caso, dove vengono utilizzati controlli composti multipli in attività diverse (e più volte in un'unica attività) - e il problema era dovuto gonfiarsi dal layout XML. La mia soluzione a quel problema precedente era di sbarazzarsi del gonfiaggio dal layout, e invece di creare gli oggetti attraverso il codice. Questo è stato accettabile perché quei controlli composti erano molto più semplici e contenevano solo due viste, tuttavia mi sento nel caso di ListView di cui sopra, dove il mio controllo composto ha almeno dieci view in esso, non è una soluzione accettabile per definire ogni vista nel codice. Ho bisogno del layout XML.

Qualcuno ha mai sperimentato questo tipo di comportamento di scontro quando si utilizzano controlli composti personalizzati gonfiati da XML e riutilizzati in più istanze?

È stato utile?

Soluzione

From my understanding Android should create a new instance of the widgets each time you inflate the xml. Do you have any static members in you compound widget class?

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