Pergunta

Eu estou dando um Picasso tentar por algum mais fácil o gerenciamento de memória com as imagens.Acabei de tentar implementá-lo dentro do meu fragmento no entanto, eu não consigo fazê-lo funcionar.

mainLayout.setBackground(new BitmapDrawable(getResources(), Picasso.with(mainLayout.getContext()).load(R.drawable.background2).get()));

Onde layoutprincipal é um LinearLayout.Eu também tentei isso:

Picasso.with(getActivity().getApplicationContext()).load(R.drawable.background2).into(imageView1);

Eu tentei Picasso.com(este)...mas isso não funciona em todos.

Continuo a receber uma Exceção de:

java.lang.IllegalStateException: Method call should not happen from the main thread.
at com.squareup.picasso.Utils.checkNotMain(Utils.java:71)
at com.squareup.picasso.RequestCreator.get(RequestCreator.java:206)
at ... 

onde eu o chamava.

Qualquer pessoa experimentar isso ou sabe como usar isso corretamente com fragmentos?

Foi útil?

Solução

A exceção estados de mensagem é bastante clara.A .get() mensagem não é assíncrona, portanto, vai fazer o trabalho (de rede, leitura de arquivo,...seja o que for) no thread principal, que você deve evitar, sempre que possível.

O seu código para definir a imagem para uma imageView parece correto, para mim, ainda.

Eu acho que também é possível fazer o mesmo com o layoutprincipal (Picasso, em seguida, irá definir o drawable/Bitmap para o plano de fundo automaticamente).Se estou errado, aqui, ter um olhar para o Target.class que vem com Picasso.Você pode carregar a imagem em um alvo, que deve fornecer processadores para o sucesso e o erro.No sucesso manipulador, você vai obter o mapa de bits, uma vez que é carregado e pode configurá-lo para o seu bakground.

Existem algumas soluções, o que pode funcionar no seu caso.

[EDITAR]

Quando utilizar o Método get (), fornecido por Picasso o carregamento terá lugar no segmento que você está trabalhando no momento, o que é claramente indicado nas fontes:https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/RequestCreator.java

/** Síncrona cumprir este pedido.Não deve ser chamado de thread principal.*/

público Bitmap get() throws IOException {[...]}

No seu caso eu usaria o Destino de interface, que oferece chamadas de retorno quando a imagem é carregada.

Picasso.with(getActivity()).load(R.drawable.background2).into(new Target(){

  @Override
  public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) {
     mainLayout.setBackground(new BitmapDrawable(context.getResources(), bitmap));
  }

  @Override
  public void onBitmapFailed(final Drawable errorDrawable) {
      Log.d("TAG", "FAILED");
  }

  @Override
  public void onPrepareLoad(final Drawable placeHolderDrawable) {
      Log.d("TAG", "Prepare Load");
  }      
});

Como você está usando um recurso interno aqui, porque não basta fazer o seguinte?

mainLayout.setBackgroundResource(R.drawable.background2);

Espero que isso ajude.

Matéria

Outras dicas

Tente isso

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.imageview = (ImageView) v.findViewById(R.id.news_img);
        holder.tvName = (TextView) v.findViewById(R.id.news_title);
        holder.tvDate = (TextView) v.findViewById(R.id.news_time);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    holder = (ViewHolder )v.getTag();
    Picasso.with(context).load(postList.get(position).getThumbnail()).into(holder.imageview);
    holder.tvName.setText(postList.get(position).getTitle());
    holder.tvDate.setText(postList.get(position).getDate());

    return v;

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top