Search code examples
androidonclicklistenerlistadapteronitemclicklistener

Android How to change OnItemClickListener code in OnClickListener code


I changed my initial Activity in SherlockActivity in order to benefit from all the advantages of ABS. and for this I use a ListAdapterAnSco extends BaseAdapter. Now I want to manageonclick and onLongClick in getView of my ListAdapter. I used several combinations but I can not do it.

NB: I use the SQLiteCursor to get items

Original OnItemClickListener Code


public void onItemClick(AdapterView<?>  parent, View v, int position,
                    long id) {
                Intent intent = new Intent(getApplicationContext(),ListPeriode.class);

                SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
                String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO));
                AnSco an=new AnSco(ansco);
                an.setIdan((int)id);

                Toast.makeText(getApplicationContext(), "Année Scolaire: "+an.getAnsco(), Toast.LENGTH_LONG).show();
                intent.putExtra("ANSCO_ID", an.getIdan());
                intent.putExtra("ANSCO_AN", an.getAnsco());
                cr.close();
                startActivity(intent);
                finish();
            }

How to change this code in an OnClick methode to do the same work?

My getView


public View getView(final int position, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.annee_sco_item, null);
            // Locate the TextViews in listview_item.xml
            holder.an = (TextView) view.findViewById(R.id.ansco_item);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        // Set the results into TextViews
        holder.an.setText(listAnsco.get(position).getAnsco());

        // Listen for ListView Item Click
        view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {


            }
        });

        return view;
    }

Solution

  • Extract OnClickListener to seperate class and pass it again

    MyClickListener.java

     public class MyClickListener implements onItemClickListener
     {
         @override
         public void onItemClick(AdapterView<?>  parent, View v, int position, long id)
         {
             Intent intent = new Intent(getApplicationContext(),ListPeriode.class);
             SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position);
             String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO));
             AnSco an=new AnSco(ansco);
             an.setIdan((int)id);
             Toast.makeText(getApplicationContext(), "Année Scolaire:"+an.getAnsco(), Toast.LENGTH_LONG).show();
             intent.putExtra("ANSCO_ID", an.getIdan());
             intent.putExtra("ANSCO_AN", an.getAnsco());
             cr.close();
             startActivity(intent);
             finish();
         }
    }
    

    in your adapter remove the

       // Listen for ListView Item Click
        view.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View arg0) {
                }
            });
    

    YourActivity.java

    @override
    onCraete(Bundle x)
    {
        ListView listView = (ListView) findViewById(R.i.your_list_id);
        listView.setAdapter(new YourAdapter()); 
        listView.setOnItemClickListener(new MyClickListener());
    }