Escrevendo matrizes de Parcelables a uma parcela no Android
-
19-09-2019 - |
Pergunta
Eu estou tentando escrever um array de objetos que implementam Parcelable em um Parcel usando writeParcelableArray .
Os objetos Eu estou tentando escrever são definidos (como seria de esperar) como:
public class Arrival implements Parcelable {
/* All the right stuff in here... this class compiles and acts fine. */
}
E eu estou tentando escrever-los em um `Parcel' com:
@Override
public void writeToParcel(Parcel dest, int flags) {
Arrival[] a;
/* some stuff to populate "a" */
dest.writeParcelableArray(a, 0);
}
Quando Eclipse tenta compilar este eu recebo o erro:
incompatibilidade Limite: O método genérico writeParcelableArray (T [], int) de tipo Parcel não é aplicável para o argumentos (Chegada [], int). o tipo inferido de chegada não é um válido substituir o parâmetro limitada
I completamente não entender esta mensagem de erro. Parcelable
é uma interface (não uma classe) para que você não pode estendê-lo. Alguém tem alguma idéia?
UPDATE: Eu estou tendo basicamente o mesmo problema quando colocar um ArrayList
de Parcelable
s em um Intent
:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
rendimentos:
O método putParcelableArrayListExtra (String, ArrayList Estende Parcelable>) no tipo de Intenção não é aplicável para os argumentos (String, ArrayList
)
Isso pode ser porque Location
foi a classe que eu estava trabalhando acima (que envolve as Arrival
s), mas eu não penso assim.
Solução 2
Acontece que ele só me queria construir uma matriz de Parcelables. Para usar o exemplo da pergunta:
@Override
public void writeToParcel(Parcel dest, int flags) {
Parcelable[] a;
/*
some stuff to populate "a" with Arrival
objects (which implements Parcelable)
*/
dest.writeParcelableArray(a, 0);
}
Outras dicas
Na verdade, você pode estender uma interface, e parece que você precisa fazer exatamente isso. O parâmetro de genéricos no writeParcelableArray está pedindo uma interface estendida (não a própria interface). Tente criar uma interface MyParcelable estende Parcelable. Em seguida, declarando sua matriz usando a interface, mas a impl deve ser sua chegada estende MyParcelable.
Eu sei que o problema está resolvido, mas a minha solução era outro, então eu estou postando aqui: no meu caso Eclipse importados automaticamente pacote errado, porque de classes de nomes abiguity (alguns dom.Comment vez de minha classe comentário)