Cómo dejar OnClick en la función de la llamada de adaptador ListView de la actividad
Tengo una aplicación de Android con un ListView en él, el ListView va a configurar bien, pero ahora quiero una imagen en el ListView para ser clicable. Hago esto usando 2 clases, la clase de la actividad (padre) y un ArrayAdapter para llenar la lista. En el ArrayAdapter implemento un OnClickListener para la imagen en la lista que quiero que se pueda hacer clic.
Hasta ahora todo funciona.
- En EditText, aparece un diálogo al hacer clic en un subconjunto específico de texto
- ¿Por qué no AsyncTasks siempre funcionan dentro de un onClickListener?
- Android: onClick responde sólo al segundo clic en listview
- Android no puede encontrar el método desde el botón onClick en ListView Row
- Protección contra el spam onclick ()
Pero ahora quiero ejecutar una función de la clase de actividad cuando el onClick, para la imagen en la lista, se ejecuta pero no sé cómo. A continuación se presentan las 2 clases que utilizo.
Primero la clase de actividad:
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 } }
Y el ArrayAdapter desde donde quiero llamar a una función de la clase de actividad:
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; } }
Si alguien sabe cómo ejecutar la función en la clase de actividad desde el arrayadapter o cómo establecer la imagen onClickListener en la clase de actividad que en gran medida apriciate la ayuda.
- Android one OnClick método para varios botones?
- Cambiar el fondo ListView - comportamiento extraño
- RecyclerView onClick
- OnClickListener en pestañas no funciona
- Cambiar el contenido de la ficha dependiendo del elemento del hilador seleccionado
- Obtener la latitud y la longitud de un clic en el mapa en osmdroid
- Android: Cambiar el fondo del botón en ListView Row con onClick
- Cómo configurar OnClickListener (Android)
Dentro de onClick()
Haz algo como esto:
((ParentClass) context).functionToRun();
Sólo por claridad para ampliar las respuestas proporcionadas En un BaseAdapter puede obtener la clase padre llamando a this.getActivity();
Si entonces typecast esto a la clase de actividad real usted puede entonces llamar una función según la respuesta de @AdilSoomro abajo así que usted termina realmente para arriba con algo como esto
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(); } }
Entonces declare someFunction en MyActivity para hacer lo que quieras
protected void someFunction(){ // Do something here }
- Lista de aplicaciones instaladas por el usuario
- ¿Es posible que cuando haga clic edittext mostrará mensaje de diálogo?