Domanda

Ho cercato di riprogrammare le dimensioni di una vigilanza di immagini. Sto usando un adattatore personalizzato.

View row = convertView;
if (row == null) {
    LayoutInflater inflater =  (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.grid_item, null);
}

thumb = (ImageView) row.findViewById(R.id.bookThumb);

Quando uso ImageView Thumb = (ImageView) Row.FindViewById (R.ID.Bookthumb); All'interno dell'adattatore personalizzato funziona alla grande, ma perché è in giro per ogni riga, rende lo scorrimento molto lento.

Quindi ... sto cercando di ottenere il pollice = (ImageView) Row.FindViewById (R.ID.Bookthumb); Dalla mia attività principale e impostare le sue dimensioni, ma ottengo null e quindi la forza dell'app si chiude.

Provato:

LinearLayout layout = (LinearLayout) findViewById(R.id.gridLayout);
ImageView thumbRow = (ImageView)layout.findViewById(R.id.bookThumb);

Provato anche:

// gv is the gridview (R.id.gridview)
ImageView thumbRow = (ImageView)gv.findViewById(R.id.bookThumb);

Diventa sempre nullo.

Apprezzo qualsiasi aiuto! Mi sento come se mi manca qualcosa di sciocco :)

È stato utile?

Soluzione

Penso che il problema sia in due posti.

Prima di tutto il problema originale. Il tuo adattatore è lento a causa della chiamata FindViewByid. Fai uso della vista riciclata ed è fantastico, ma attraversi ancora la vista per la miniatura. Esiste una tecnica, chiamata informale, che fondamentalmente la rende più una chiamata diretta.

Quindi, invece di utilizzare la vista riciclata come luogo per iniziare a riempire i dati, collega anche una struttura ad essa in modo da poter pre -riuscire gli elementi che si desidera manipolare

if (row == null) {
    LayoutInflater inflater =  (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.grid_item, null);
    row.setTag(row.findViewById(R.id.bookThumb));

}

thumb = (ImageView) row.getTag();

Qui chiamiamo direttamente per variabile e non viene eseguita alcuna attraversamento. Questo dovrebbe essere molto più veloce.

Anche il secondo problema, il nullpointercepton.

Penso che sia l'ambiguità degli ID mescolati al punto in cui chiami FindViewById nella tua attività principale. Non puoi davvero farlo bene nella tua mainttività, soprattutto se c'è uno scorrimento coinvolto in quanto dovresti intercettare la chiamata per il rendering all'interno della vista dell'adattatore. La maggior parte dei callback sono già sul thread principale, quindi due cose non possono accadere contemporaneamente su quel thread.

Quindi, nel punto in cui hai chiamato findViewById () l'adattatore potrebbe non aver ancora eseguito e allegato questa vista alla gerarchia. E se lo facesse, potrebbe non aver ancora finito di manipolarlo.

Proverei ad accelerare il tuo adattatore prima di affrontare il secondo problema in quanto non sono sicuro che sia nemmeno possibile farlo in modo sicuro o accurato, senza abbandonare completamente l'uso di una vista dell'adattatore.

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