2012-04-09 15 views
11

Ho un'applicazione Android con ListView, ListView si installa bene ma ora voglio che l'immagine in ListView sia selezionabile. Lo faccio usando 2 classi, la classe Activity (genitore) e un ArrayAdapter per riempire la lista. In ArrayAdapter implemento un OnClickListener per l'immagine nell'elenco che desidero essere selezionabile.Come fare clic su OnClick nella chiamata dell'adapter di ListView Funzione attività

Finora tutto funziona.

Ma ora voglio eseguire una funzione dalla classe di attività quando onClick, per l'immagine nell'elenco, viene eseguito ma non so come. Di seguito sono le 2 classi che uso.

prima classe di attività:

public class parent_class extends Activity implements OnClickListener, OnItemClickListener 
{ 
    child_class_list myList; 
    ListView myListView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // setup the Homelist data 
     myList  = new child_class_list (this, Group_Names, Group_Dates); 
     myListView = (ListView) findViewById(R.id.list); 

     // set the HomeList 
     myListView.setAdapter(myList); 
     myListView.setOnItemClickListener(this); 
    } 

    void function_to_run() 
    { 
     // I want to run this function from the LiscView Onclick 
    } 

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
    { 
     // do something 
    } 
} 

E l'ArrayAdapter da dove voglio chiamare una funzione della classe di attività:

public class child_class_list extends ArrayAdapter<String> 
{ 
    // private 
    private final Context context; 
    private String[]  mName; 
    private String[]  mDate; 

    public child_class_list (Context context, String[] Name, String[] Date) 
    { 
     super(context, R.layout.l_home, GroupName); 
     this.context  = context; 
     this.mName  = Name; 
     this.mDate = Date; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.l_home, parent, false); 

     ImageView selectable_image = (ImageView) rowView.findViewById(R.id.l_selectable_image); 
     selectable_image.setOnClickListener(new OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       // I want to run the function_to_run() function from the parant class here 
      } 
     } 
     ); 

     // get the textID's 
     TextView tvName = (TextView) rowView.findViewById(R.id.l_name); 
     TextView tvDate = (TextView) rowView.findViewById(R.id.l_date); 

     // set the text 
     tvName.setText  (mName[position]); 
     tvDate.setText (mDate[position]); 

     return rowView; 
    } 
} 

Se qualcuno sa come far funzionare la funzione nell'attività classe dall'arrayadapter o come impostare l'immagine onClickListener nella classe di attività mi piacerebbe molto apriciate l'aiuto.

risposta

44

All'interno onClick() fare qualcosa di simile:

((ParentClass) context).functionToRun(); 
+0

Grande. Semplice ed efficace. –

8

Solo per chiarezza di espandersi su risposte fornite In un BaseAdapter è possibile ottenere la classe padre chiamando this.getActivity(); Se poi si typecast questo alla classe effettiva attività si possono poi chiamare una funzione come da @AdilSoomro risposta qui sotto in modo che in realtà finisce con qualcosa di simile

public class MyAdapter extends BaseAdapter<Long> { 
    public MyAdapter(Activity activity, 
      TreeStateManager<Long> treeStateManager, int numberOfLevels) { 
     super(activity, treeStateManager, numberOfLevels); 
    } 

    @Override 
    public void handleItemClick(final View view, final Object id) { 
     ((MyActivity) this.activity).someFunction(); 
    } 
} 

poi basta dichiarare someFunction in MyActivity per fare ciò che w ant

protected void someFunction(){ 
// Do something here 
    } 
Problemi correlati