如何修改内部类中的holder(ImageView)?

时间:2017-11-13 18:17:33

标签: android fragment global-variables uri inner-classes

我有一个名为ObjetoAdapter的适配器,它有一个名为MyViewHolder的ViewHolder和ImageView“fotoObjeto”。在这个适配器中有一个内部类

storageReference = ConfiguracaoFirebase.getFirebaseStorage();
StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");

childRef.getDownloadUrl.addOnSuccessListener{
     @Override
     public void onSuccess(Uri uri) {

     Log.i("OA7.1","objeto.getnome() uri: " + uri );
     Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
}

事实是,我试图(通过所有方式)检索此addOnSuccessListener {...}之外的“uri”,但没有成功。此外,我使用SharedPreferences存储此值,如下所示:

storageReference = ConfiguracaoFirebase.getFirebaseStorage();
StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");

childRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.i("OA7.1","objeto.getnome() uri: " + uri );
                Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);

                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext().getApplicationContext());
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("KEY",uri.toString());
            }
        });

        if(sharedPreferences.contains("KEY")){
            Uri uri = Uri.parse( sharedPreferences.getString("KEY",null) );
            Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
        }

但即便经过这些尝试,我也意识到sharedPreferences会保存一个明显错误的uri。换句话说,共享首选项可以保存uri,但与原始版本不同。没有其他共享密钥。 我需要帮助,我已经“清理”谷歌试图找到这个技巧的解决方案。 欢迎任何帮助。谢谢!

在这里,我将把所有片段代码:

package com.mypackage

import android.app.Fragment;
import android.content.ContentProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.StorageManager;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.DownloadListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.droidelivery.droidelivery.R;
import com.droidelivery.droidelivery.activity.LoginActivity;
import com.droidelivery.droidelivery.activity.MeuItemActivity;
import com.droidelivery.droidelivery.config.ConfiguracaoFirebase;
import com.droidelivery.droidelivery.helper.Base64Custom;
import com.droidelivery.droidelivery.helper.ImageProcess;
import com.droidelivery.droidelivery.model.Objeto;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Lucas on 16/09/2017.
 */

public class ObjetoAdapter extends ArrayAdapter<Objeto> {
    private ArrayList<Objeto> objetos;
    private Context context;
    private FirebaseUser usuarioLogado;
    private ImageView fotoObjeto;
    DatabaseReference databaseReference;

    private Button botaoExcluir;
    private DatabaseReference dataBaseReference;
    private DatabaseReference dataBaseReferenceGeral;
    private StorageReference storageReference;
    //private int i = 0;
    private int itemAba;
    private Bitmap bitmap;
    private String bitmapString;




    public ObjetoAdapter(@NonNull Context c, @NonNull ArrayList<Objeto> objects) {
        super(c, 0, objects);
        this.objetos = objects;
        this.context = c;
    }

    class MyViewHolder{
        ImageView fotoObjeto;
        TextView nomeObjeto;
        TextView emailObjeto;
        Button botaoExcluir;

        MyViewHolder(View v){

            nomeObjeto = (TextView) v.findViewById(R.id.tv_nome);
            emailObjeto = (TextView) v.findViewById(R.id.tv_email);
            botaoExcluir = (Button) v.findViewById(R.id.botaoExcluirId);
            fotoObjeto = (ImageView) v.findViewById(R.id.img_objeto_id);
        }
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent){
        //Log.i("DDD8(ObjetoAdapter)","getView CHAMADO!!! " );
        Log.i("OA1","position(ObjetoAdapter): " + position );
        View view = null;

        View row = convertView;
        MyViewHolder holder = null;
        if( row == null ){
            //inicializar objeto para montagem da view
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

            row = inflater.inflate(R.layout.lista_objeto, parent , false);
            holder = new MyViewHolder(row);
            row.setTag(holder);
        }else{
            holder = (MyViewHolder) row.getTag();
        }

        //Recebe qual foi a última aba da MainActivity
        final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences( getContext() );
        Log.i("OA2","getContext(): " + getContext() );
        if( sharedPreferences.contains("CURRENT_ITEM") ){
            itemAba = sharedPreferences.getInt("CURRENT_ITEM",0);
            Log.i("OA3","itemAba:" + itemAba );
        }

            usuarioLogado = ConfiguracaoFirebase.getFirebaseAutenticacao().getCurrentUser();
            dataBaseReference = ConfiguracaoFirebase.getFirebase().child("objetos").child( Base64Custom.codificarBase64( usuarioLogado.getEmail() ) );
            dataBaseReferenceGeral = ConfiguracaoFirebase.getFirebase().child("geral");
            storageReference = ConfiguracaoFirebase.getFirebaseStorage();

            Log.i("OA4","storageReference: " + storageReference);




        holder.fotoObjeto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Toast.makeText(getContext(),"PODE MOSTRAR UMA IMAGEM SOZINHA!", Toast.LENGTH_LONG ).show();
                Log.i("OA5","getContext()" + getContext() );
                Intent intent = new Intent(getContext(), MeuItemActivity.class);
                intent.putExtra("POSICAO", position); //passar a posicao do clique na ListView para a MeuItemActivity.java
                getContext().startActivity( intent );

            }
        });


        holder.botaoExcluir.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                objetos.remove(position);
                notifyDataSetChanged();

                    dataBaseReference.addValueEventListener(new ValueEventListener() {
                        int i = 0;
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for(DataSnapshot dados: dataSnapshot.getChildren() ){
                                final Objeto objeto = dados.getValue( Objeto.class );
                                Log.i("OA6","objeto.getNome():" + objeto.getNome() + "posicao: " + i);
                                if(i == position ){
                                    Log.i("OA7","objeto.getNome():" + objeto.getNome() + "posicao: " + i + "EXCLUÍDO!");
                                    dataBaseReference.child(dados.getKey()).removeValue();

                                    dataBaseReferenceGeral.addValueEventListener(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot) {
                                            for(DataSnapshot dadosGeral: dataSnapshot.getChildren() ){
                                                Objeto objetoGeral = dadosGeral.getValue( Objeto.class);

                                                if( objetoGeral.getNome().equals( objeto.getNome() ) &&
                                                    objetoGeral.getDescricao().equals( objeto.getDescricao() ) &&
                                                        objetoGeral.getUrl().equals( objeto.getUrl() )

                                                   ){
                                                        dataBaseReferenceGeral.child(dadosGeral.getKey()).removeValue();
                                                    }
                                            }
                                        }

                                        @Override
                                        public void onCancelled(DatabaseError databaseError) {

                                        }
                                    });

                                }
                                i++;
                            }
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                            }
                        });

            final Objeto objeto = objetos.get( position );
            holder.nomeObjeto.setText( objeto.getNome() );
            holder.emailObjeto.setText( usuarioLogado.getEmail() );
            //Glide.with(getContext().getApplicationContext()).load(objeto.getUrl()).override(100, 200).into(holder.fotoObjeto);
            //Glide.with(getContext().getApplicationContext()).load(objeto.getUrl()).override(100, 200).into(holder.fotoObjeto);
            //holder.fotoObjeto.setImageBitmap(ImageProcess.getBitmapFromURL(objeto.getUrl()));
            //Glide.with(getContext().getApplicationContext()).load().override(100, 200).into(holder.fotoObjeto);


        //final SharedPreferences.Editor editor = sharedPreferences.edit();
        storageReference = ConfiguracaoFirebase.getFirebaseStorage();
        StorageReference childRef = storageReference.child(objeto.getNome() + ".jpg");
        childRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.i("OA7.1","objeto.getnome() uri: " + uri );
                Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);

                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext().getApplicationContext());
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("KEY",uri.toString());
            }
        });

        if(sharedPreferences.contains("KEY")){
            Uri uri = Uri.parse( sharedPreferences.getString("KEY",null) );
            Glide.with(getContext().getApplicationContext()).load(uri).override(100, 200).into(holder.fotoObjeto);
        }

            Log.i("OA8","objetos.size = " + objetos.size()); //numero de elementos da lista (confirmado!)

        if(sharedPreferences.contains("link")){
            String link = sharedPreferences.getString("link","");
                    Log.i("OA9","link(ObjetoAdapter) = " + link);
                    Log.i("OA10","objetos.get(position).getUrl(ObjetoAdapter) = " + objetos.get(position).getUrl());
            Toast.makeText(context, "link: " + link, Toast.LENGTH_SHORT).show();

        }

        //final MyViewHolder finalHolder = holder;

        return row;
        }
        //return view;
    }

0 个答案:

没有答案