Search code examples
androidandroid-listviewandroid-arrayadapter

ListView Adapter - ItemID


I have the following ArrayAdapter:

public class CriteriosAdapter extends ArrayAdapter<Criterio> {

private Context context;

public CriteriosAdapter(Context context, List<Criterio> objects) {
    super(context, 0, objects);
    this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final Criterio criterio = getItem(position);
    final CriterioViewHolder viewHolder;

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.fragment_row, parent, false);

        viewHolder = new CriterioViewHolder();
        viewHolder.txtCriterio = (TextView)convertView.findViewById(R.id.txtCriterio);
        viewHolder.tgIrregular = (ToggleButton)convertView.findViewById(R.id.tgIrregular);
        viewHolder.btnCam = (ImageView) convertView.findViewById(R.id.btnCam);

        convertView.setTag(viewHolder);
    }
    else {
        viewHolder = (CriterioViewHolder)convertView.getTag();
    }

    viewHolder.txtCriterio.setText(criterio.nome);
    viewHolder.txtCriterio.setTextColor(context.getColor(R.color.white));
    viewHolder.tgIrregular.setChecked(false);

    viewHolder.tgIrregular.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (viewHolder.tgIrregular.isChecked()) {
                viewHolder.btnCam.setVisibility(View.VISIBLE);
            } else {
                viewHolder.btnCam.setVisibility(View.INVISIBLE);
            }
        }
    });

    viewHolder.btnCam.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            FragmentActivity activity = (FragmentActivity)(context);
            android.support.v4.app.FragmentManager fm = activity.getSupportFragmentManager();
            FotosFragment alertDialog = new FotosFragment();
            alertDialog.show(fm, "fragment_alert");
        }
    });

    return convertView;
}

class CriterioViewHolder {

    TextView txtCriterio;
    ToggleButton tgIrregular;

    ImageView btnCam;

}

}

Therefore, I want to set the itemID of each item as the ID stored in the database. Because, when the toggle button is setted to ON, I wish to get that value.

Could someone help on it?


Solution

  • public class CriteriosAdapter extends ArrayAdapter<Criterio> {
    
    private Context context;
    
    public CriteriosAdapter(Context context, List<Criterio> objects) {
        super(context, 0, objects);
        this.context = context;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final Criterio criterio = getItem(position);
        final CriterioViewHolder viewHolder;
    
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.fragment_row, parent, false);
    
            viewHolder = new CriterioViewHolder();
            viewHolder.txtCriterio = (TextView)convertView.findViewById(R.id.txtCriterio);
            viewHolder.tgIrregular = (ToggleButton)convertView.findViewById(R.id.tgIrregular);
            viewHolder.btnCam = (ImageView) convertView.findViewById(R.id.btnCam);
    
            convertView.setTag(viewHolder);
        }
        else {
            viewHolder = (CriterioViewHolder)convertView.getTag();
        }
    
        viewHolder.txtCriterio.setText(criterio.nome);
        viewHolder.txtCriterio.setTextColor(context.getColor(R.color.white));
        viewHolder.tgIrregular.setChecked(false);
    
        viewHolder.tgIrregular.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (viewHolder.tgIrregular.isChecked()) {
                    viewHolder.btnCam.setVisibility(View.VISIBLE);
                } else {
                    viewHolder.btnCam.setVisibility(View.INVISIBLE);
                }
            }
        });
    
        viewHolder.btnCam.setOnClickListener(new Listener(position,criterio));
    
        return convertView;
    }
    
    class CriterioViewHolder {
    
        TextView txtCriterio;
        ToggleButton tgIrregular;
    
        ImageView btnCam;
    
    }
    
    
        class Listener implements OnClickListener {
            private int position;
            Criterio data;
    
            Listener(int position,Criterio data) {
                this.position = position;
    
                this.data = data;
            }
    
            @SuppressLint("UseValueOf")
            @Override
            public void onClick(View v) {
    
                // you get the unique id of every item and perform your desired operation
            id = data.getId();
    
    
            }
        }
    
        }