Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

On a ListView item's child click

I have a ListView where each of its items is composed from some ImageViews and TextViews, i want that when i click on a specefic ImageView, some code will be executed, where should i put this code is it in onItemClick method?

public class EspaceClientUplodedProducts extends Activity implements OnItemClickListener{

List<Produit> lesProduits= new ArrayList<Produit>();
ListView lvListe;
ProductsDataSource produitSource;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.espaceclientuploads);

    produitSource=new ProductsDataSource(this);
    produitSource.open();
    lesProduits=produitSource.getAllUploads();

    lvListe= (ListView)findViewById(R.id.UploadListView);
    UploadedAdapter adapter = new UploadedAdapter(this, lesProduits);
    lvListe.setAdapter(adapter);
    lvListe.setOnItemClickListener(this);
}



@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
{

}


@Override
protected void onPause() {
    produitSource.close();
    super.onPause();
}

the getView code:

 public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;
    if (convertView==null)
    {
        holder=new ViewHolder();
        convertView = inflater.inflate(R.layout.espaceclientuploadsource, null);
        holder.nomduProduit = (TextView)convertView.findViewById(R.id.UploadedProductName);
        holder.prixDuProduit = (TextView)convertView.findViewById(R.id.UplodedProductPrice);
        holder.imageDuProduit = (ImageView)convertView.findViewById(R.id.Uplodimage);
        holder.status = (ImageView)convertView.findViewById(R.id.UploadedStatus);
        holder.delete=(ImageView)convertView.findViewById(R.id.ImageViewDelete);
        convertView.setTag(holder);
    }

    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    Bitmap bitmapImage = BitmapFactory.decodeFile(path+File.separator+lesProduits.get(position).getImage());

    Drawable drawableImage = new BitmapDrawable(bitmapImage);
    holder.imageDuProduit.setImageDrawable(drawableImage);
    holder.nomduProduit.setText(lesProduits.get(position).getNomDuProduit());
    holder.prixDuProduit.setText(lesProduits.get(position).getPrixDuProduit());
    holder.delete.setImageResource(R.drawable.delete);

    switch (lesProduits.get(position).getStatus())
    {

    case 3://annonce Accepté
    holder.status.setImageResource(R.drawable.accepte); 
    break;

    case 2://annonce en Attente
    holder.status.setImageResource(R.drawable.enattente);   
    break;

    case 1://annonce refusé
    holder.status.setImageResource(R.drawable.refuse);
    break;

    case 0://produit vendu
    holder.status.setImageResource(R.drawable.vendu);
    break;
    }
    return convertView;
}
like image 454
Hossam Oukli Avatar asked Oct 19 '25 21:10

Hossam Oukli


2 Answers

Let's say your getView has a textView and a imageView:

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.xml, parent, false);
    // setup view bindings
    TextView textView = view.findViewById(R.id.textView);
    ImageView imageView = view.findViewById(R.id.imageView);

    setClickListener(textView, position, parent);
    setClickListener(imageView, position, parent);
}
    
private void setClickListener(View view, final int position, final ViewGroup parent){
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // this part is important, it lets ListView handle the clicks
            ((ListView) parent).performItemClick(v, position, 0);
        }
    });
}

Now in Activity or Fragment:

ListView listView = findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        long viewId = view.getId();
        if (viewId == R.id.textView) {
            Toast.makeText(Activity.this, "TextView Clicked", Toast.LENGTH_SHORT).show();
        } else if (viewId == R.id.imageView) {
            Toast.makeText(Activity.this, "ImageView Clicked", Toast.LENGTH_SHORT).show();
        }
    }
});
like image 194
Max Avatar answered Oct 22 '25 10:10

Max


In the UploadedAdapter in getView() you must be creating the object of the ImageViews.

Just set the onClickListener to the objects of that ImageViews and handle the click event in the onClick on the basis of the id of each ImageView.

like image 42
bakriOnFire Avatar answered Oct 22 '25 11:10

bakriOnFire



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!