我想在我的ListView中添加一个OnClickListener,以便我可以通过单击列表的元素来启动其他Activity,但是在编写lista.setOnclikListener时遇到问题,因为我总是收到错误消息。 任何人都可以帮我解决这个问题吗? 谢谢你:))
有问题的代码是:
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class SeleccionRutina extends Activity {
DBAdapter dba=new DBAdapter(this);
ArrayList<Rutina> arraydir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seleccion_rutina);
ListView lista = (ListView) findViewById(R.id.listarutinas);
arraydir = new ArrayList<Rutina>();
Rutina rutina;
//usamos la base de datos para sacar los datos e introducirlos en el fragment para el listView
dba=dba.open();
Cursor rut =dba.getRutinas();
if (rut.moveToFirst()){
do{
//introducimos los datos
Rutina r = new Rutina(rut.getString(0),rut.getString(1)); //el primer argumento es el nombre y el segundo el grupo muscular
arraydir.add(r);
}while (rut.moveToNext());
}
//cerramos el cursor al terminar de utilizarlo
rut.close();
dba.close();
//creamos el adapter personalizado
AdapterRutina adapter = new AdapterRutina(this,arraydir);
//lo aplicamos
lista.setAdapter(adapter);
//aplicamos el onclick para la lista
/*lista.setOnClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>adapter, View v, int position,long id){
Toast.makeText(getBaseContext(),"Click en "+arraydir.get(position).getNombre(),Toast.LENGTH_SHORT);
}
});*/
}
我的dbadapter:
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBAdapter {
//Declaramos el nombre y la version de la base de datos
static final String DATABASE_NAME = "GymTrackerDB.db";
static final int DATABASE_VERSION = 1;
//Declaramos las sentencias de cración de la base de datos
static final String CREACION_RUTINA="CREATE TABLE RUTINA (" +
"NOMBRE TEXT PRIMARY KEY NOT NULL," +
"GRUPO_MUSCULAR TEXT)";
static final String CREACION_EJERCICIO="CREATE TABLE EJERCICIO(" +
"ID INTEGER PRIMARY KEY autoincrement," +
"NOMBRE TEXT NOT NULL," +
"NUMERO INTEGER," +
"COMENTARIO TEXT," +
"NOMBRE_RUTINA TEXT NOT NULL REFERENCES RUTINA (NOMBRE))";
static final String CREACION_PESOS="CREATE TABLE PESOS(" +
"ID_EJERCICIO INTEGER NOT NULL REFERENCES EJERCICIO (ID)," +
"FECHAHORA TEXT NOT NULL," +
"PESO FLOAT," +
"PRIMARY KEY (ID_EJERCICIO,FECHAHORA))";
static final String CREACION_SERIES="CREATE TABLE SERIES(" +
"ID_EJERCICIO INTEGER NOT NULL REFERENCES EJERCICIO (ID)," +
"FECHAHORA_PESOS TEXT NOT NULL REFERENCES EJERCICIO (FECHAHORA)," +
"SERIE INTEGER," +
"PRIMARY KEY (ID_EJERCICIO,FECHAHORA_PESOS,SERIE))";
static final String CREACION_REPETICIONES="CREATE TABLE REPETICIONES(" +
"ID_EJERCICIO INTEGER NOT NULL REFERENCES EJERCICIO (ID)," +
"FECHAHORA_PESOS TEXT NOT NULL REFERENCES EJERCICIO (FECHAHORA)," +
"REPETICION INTEGER," +
"PRIMARY KEY (ID_EJERCICIO,FECHAHORA_PESOS,REPETICION))";
private final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;
public DBAdapter(Context context){
this.context=context;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
try{
db.execSQL(CREACION_RUTINA);
db.execSQL(CREACION_EJERCICIO);
db.execSQL(CREACION_PESOS);
db.execSQL(CREACION_SERIES);
db.execSQL(CREACION_REPETICIONES);
}catch (SQLException e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
//este metodo se implemetara en futuras versiones
}
}
//Abre la base de datos
public DBAdapter open()throws SQLException{
db=DBHelper.getWritableDatabase();
return this;
}
//Cierra la base de datos
public void close(){
DBHelper.close();
}
//Recupera todas las rutinas
public Cursor getRutinas(){
return db.rawQuery("SELECT NOMBRE, GRUPO_MUSCULAR FROM RUTINA ORDER BY NOMBRE",null);
}
listAdapter:
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class AdapterRutina extends BaseAdapter {
private Activity activity;
private ArrayList<Rutina> items;
public AdapterRutina(Activity activity, ArrayList<Rutina> items) {
this.activity = activity;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int arg0) {
return items.get(arg0);
}
@Override
public long getItemId(int position) { //devolvemos la posicion si existe, y si no existe devolvemos -1
if (position<items.size()){
return position;
}
else{
return -1;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Generamos una convertView por motivos de eficiencia
View v = convertView;
//Asociamos el layout de la lista que hemos creado
if(convertView == null){
LayoutInflater inf = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inf.inflate(R.layout.fragment_seleccion_rutina, null);
}
// Creamos un objeto Rutina
Rutina rut = items.get(position);
//Rellenamos el nombre
TextView nombre = (TextView) v.findViewById(R.id.nombreRutina);
nombre.setText(rut.getNombre());
//Rellenamos el grupo muscular
TextView grupoMuscular = (TextView) v.findViewById(R.id.nombreGrupoMuscular);
grupoMuscular.setText(rut.getGrupoMuscular());
// Devolvemos la vista
return v;
}
}
以及描述列表所示元素的类:
public class Rutina {
private String Nombre;
private String GrupoMuscular;
//constructor
public Rutina(String nombre,String grupoMuscular){
this.Nombre=nombre;
this.GrupoMuscular=grupoMuscular;
}
//setters
public void setNombre(String nombre){
this.Nombre=nombre;
}
public void setGrupoMuscular(String grupoMuscular){
this.GrupoMuscular=grupoMuscular;
}
//getters
public String getNombre(){
return this.Nombre;
}
public String getGrupoMuscular(){
return this.GrupoMuscular;
}
}
失败的代码片段就是这个,
/*lista.setOnClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>adapter, View v, int position,long id){
Toast.makeText(getBaseContext(),"Click en "+arraydir.get(position).getNombre(),Toast.LENGTH_SHORT);
}
});*/
你可以在方法onCreate
中的Seleccionrutina课程中找到它编辑:因为onClickListener而无法编译。
答案 0 :(得分:0)
您正在设置setOnClickListener并将OnItemClickListener传递给它。使用setOnItemClickListener而不是setOnClickListener