onClickListener ListView Android麻烦

时间:2014-07-02 17:24:59

标签: android listview onclicklistener

我想在我的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而无法编译。

1 个答案:

答案 0 :(得分:0)

您正在设置setOnClickListener并将OnItemClickListener传递给它。使用setOnItemClickListener而不是setOnClickListener