Devolución de llamada desde el adaptador

Así que tengo un listview personalizado. Es como el diseño de Instagram con una imagen y un montón de botones en cada elemento de la lista. Así que aquí está el problema:

Quiero implementar el botón de compartir. Para hacer esto, intenté crear una devolución de llamada del adaptador a la actividad. Pero no parecía funcionar. Esto es lo que tengo hasta ahora (he recortado las partes no relacionadas):

Actividad principal

public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{ ListView main_list; List<String> url_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_list = (ListView) findViewById(R.id.listView); ListAdapter nListAdapter = new ListAdapter(context, url_list); main_list.setAdapter(nListAdapter); } @Override public void ShareClicked(String url) { Log.e("Test",url); } } 

ListAdapter

 public class ListAdapter extends BaseAdapter implements View.OnClickListener { OnShareClickedListener mCallback; Context context; public static List<String> url_list; public ListAdapter(Context c, List<String> list) { this.context = c; url_list = list; } public interface OnShareClickedListener { public void ShareClicked(String url); } @Override public void onClick(View v) { mCallback.ShareClicked("Share this text."); } } } 

Registro de errores:

 Attempt to invoke interface method 'void com.packagename.ListAdapter$OnShareClickedListener.ShareClicked(java.lang.String)' on a null object reference 

Debe indicar al adaptador qué implementación de OnShareClickedListener () utilizar. Ahora en su adaptador el campo mCallback nunca está asignado a, o bien necesita tener un método setOnSharedClickedListener () en su adaptador que luego llama desde mainActivity y lo establece con la implementación de la actividad principal o necesita tener en el constructor.

Mi sugerencia sería usar un setter en lugar de un constructor. Así que lo que tienes que hacer es esto.

Tu ListAdapter

 public class ListAdapter extends BaseAdapter implements View.OnClickListener { OnShareClickedListener mCallback; Context context; public static List<String> url_list; public ListAdapter(Context c, List<String> list) { this.context = c; url_list = list; } public void setOnShareClickedListener(OnShareClickedListener mCallback) { this.mCallback = mCallback; } public interface OnShareClickedListener { public void ShareClicked(String url); } @Override public void onClick(View v) { mCallback.ShareClicked("Share this text."); } } 

Su MainActivty

 public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{ ListView main_list; List<String> url_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_list = (ListView) findViewById(R.id.listView); ListAdapter nListAdapter = new ListAdapter(this, url_list); nListAdapter.setOnShareClickedListener(this); main_list.setAdapter(nListAdapter); } @Override public void ShareClicked(String url) { Log.e("Test", url); } } 
  • ¿Por qué siempre escribimos cast en Android / Java?
  • Pasa parámetro complejo de ksoap Android a WCF Web-Service
  • Cómo Hash String usando SHA-1 con la clave?
  • Uso de OAuth con Scribe en Android
  • Java.lang.IllegalArgumentException: Caracteres ilegales en la autoridad en el índice 7 al hacer la solicitud https
  • Cómo llamar a strings.xml en arraylist
  • Administrador de dispositivos virtual deshabilitado en Android Studio
  • Cómo actualizar el Widget de la aplicación con la vista de lista de una actividad
  • Cómo configurar gradle-2.2.1-all.zip manualmente
  • Generador de caracteres aleatorios con un rango de (A..Z, 0..9) y puntuación
  • Firebase android proxy setting
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.