Pregunta

Tengo una clase de objeto primordial (guía) con una subclase (sesión).

public class Guide
  private class Session
     ...

  ArrayList<Session> sessions;

  public ArrayList<Session> getSessionsByTrack(int n) {
    ArrayList<Session> tracks = new ArrayList<Session>();
    for (Session session : this.sessions) {
        if (session.track == n) {
            tracks.add(session);
        }
    }
    Collections.sort(tracks); // sort by start and end time.
    return tracks;
}

Tengo un ListAdapter que debería manejar la lista para mostrar un ListView de 2 líneas:

public class SessionListAdapter extends BaseAdapter {
    private ArrayList<Session> sessions;
    //private Session[] sl;
    private LayoutInflater mInflater;

    public SessionListAdapter(Context context, ArrayList<Session> sl) {
        sessions = sl;
        mInflater = LayoutInflater.from(context);
    }
    public int getCount() {
        return sessions.size();
    }
    public Object getItem(int position) {
        return sessions.get(position);
    }
    public long getItemId(int position) {
        return position;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.session_two_line_list, null);
            holder = new ViewHolder();
            holder.title = (TextView) convertView.findViewById(R.id.session_title);
            holder.time = (TextView) convertView.findViewById(R.id.session_time);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.title.setText(sessions.get(position).getTitle());
        holder.time.setText(sessions.get(position).getTimeSpan());
        return convertView;
    }

    static class ViewHolder {
        TextView title;
        TextView time;
    }
}

En mi actividad principal, estoy tratando de mostrar la lista usando el adaptador de la lista:

...
this.lv1 = (ListView) view.findViewById(R.id.SessionListView);

        // get sessions
        this.sessionList = Guide.getSessionsByTrack(0); // errors here and complains that this method must be static
        final SessionListAdapter lv1adapter = new SessionListAdapter(this, this.sessionList);
        lv1.setAdapter(lv1adapter);
...

Mi único problema en el Guía.getSessionsByTrack El método no me permite utilizar esto. Sesiones mientras que ese método es estático. Debe ser el lista de sesiones Sea estático, ¿y si quisiera actualizar la lista, no debería ser esto estático?

Este pequeño hipo es lo único que me mantiene de mi objetivo y cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Tienes dos problemas allí.

Primero haciendo algo como esto ...

Guide.getSessionsByTrack(...);

... significa que está intentando hacer referencia a un método por su nombre de clase principal en lugar de a través de una instancia de referencia (e instanciada) de un Guide objeto. En este caso, sí, el método debe declararse como static Porque no estás instanciando explícitamente una instancia del Guide clase.

El segundo problema que tienes es que getSessionsByTrack(...) ¿No es realmente un método que pertenece al Guide clase misma, más bien pertenece a un private clase interior (Session). Básicamente, este método no puede accesible de todos modos.

Debe arreglar ambos antes de que funcione. O cree un public static método en tu Guide clase que en sí mismo llama a un static método en el Session clase o crear una instancia de Guide y proporcionar un similar get Método al que se puede acceder públicamente.

También parece tener un malentendido sobre static En que crees que significa que las cosas no se pueden actualizar. Eso sería final (en otras palabras 'constante') el uso de static tiene un significado diferente. Te sugiero que leas en el Java final y static uso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top