Android ListActivity clic de fila

Tengo una actividad que muestra información sobre un jugador. Esta parte funciona bien. (He utilizado un adaptador). ¿Pero dónde debo poner el código que detecta cuándo se hace clic en una fila?

PlayersActivity.java

package com.democratandchronicle.billstrainingcamp; import android.os.Bundle; public class PlayersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_players); PlayersAdapter adapter = new PlayersAdapter(this); getListView().setAdapter(adapter); PlayersFetchTask loadPlayersTask = new PlayersFetchTask(adapter); loadPlayersTask.execute(); } } 

PlayersAdapter.java

 package com.democratandchronicle.billstrainingcamp; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class PlayersAdapter extends BaseAdapter { private Context context; private LayoutInflater layoutInflater; private JSONArray entries = new JSONArray(); private DrawableManager dm; public PlayersAdapter(Context context) { super(); this.context = context; this.layoutInflater = (LayoutInflater) this.context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.dm = new DrawableManager(); } @Override public int getCount() { return this.entries.length(); } @Override public Object getItem(int position) { try { return this.entries.getJSONObject(position); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { RelativeLayout playerRowView; if (convertView == null) { playerRowView = (RelativeLayout) this.layoutInflater.inflate(R.layout.player_row, parent, false); } else { playerRowView = (RelativeLayout) convertView; } TextView playerNameText = (TextView) playerRowView.findViewById(R.id.playerName); TextView playerPositionText = (TextView) playerRowView.findViewById(R.id.playerPosition); ImageView playerImageView = (ImageView) playerRowView.findViewById(R.id.playerImage); try { JSONObject dataRow = this.entries.getJSONObject(position); playerNameText.setText(dataRow.getString("firstName") + " "+ dataRow.getString("lastName")); playerPositionText.setText(dataRow.getString("position")); if (!dataRow.getString("photo").equals("")) { this.dm.fetchDrawableOnThread(dataRow.getString("photo"), playerImageView); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return playerRowView; } public void upDateEntries(JSONArray entries) { this.entries = entries; this.notifyDataSetChanged(); } } 

¿Dónde debo colocar el código que detecta cuándo se hace clic en una fila?

Para detectar un clic en cualquier parte de la fila, utilice OnItemClickListener en su actividad.

Para detectar clics en diferentes regiones en cada fila, use OnClickListeners dentro de su adaptador getView() .

También puede crear un adaptador ligeramente más rápido si utiliza el método ViewHolder. Google Talk TurboCharge Su interfaz de usuario discute esta y otras buenas prácticas en detalle.


Adición

¿Cómo haría esto en mi actividad?

ListActivities tiene un OnListItemClick incorporado, la devolución de llamada tiene un nombre ligeramente diferente: onListItemClick() . Utilícelo de la siguiente manera:

 @Override protected void onListItemClick (ListView l, View v, int position, long id) { Toast.makeText(this, "Clicked row " + position, Toast.LENGTH_SHORT).show(); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.