Domanda

Ho una classe di oggetti prevalente (guida) con una sottoclasse (sessione).

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;
}

Ho un ListAdapter che dovrebbe gestire l'elenco per visualizzare un elenco di 2 righe:

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;
    }
}

Nella mia attività principale sto cercando di visualizzare l'elenco utilizzando l'adattatore dell'elenco:

...
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);
...

Il mio unico problema in Guide.GetSessionsbyTrack Il metodo non mi consente di utilizzare questa.sessioni Mentre quel metodo è statico. Deve il sessione Sii statico, cosa succede se volessi aggiornare l'elenco, non dovrebbe essere statico?

Questo piccolo singhiozzo è l'unica cosa che mi tiene dal mio obiettivo e qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Hai due problemi lì.

Innanzitutto fare qualcosa di simile ...

Guide.getSessionsByTrack(...);

... significa che stai tentando di fare riferimento a un metodo con il nome della classe genitore anziché tramite un'istanza referenziata (e istanziata) di a Guide oggetto. In questo caso, sì, il metodo deve essere dichiarato come static Perché non stai esplicitamente istanziando un'istanza del Guide classe.

Il secondo problema che hai è quello getSessionsByTrack(...) non è in realtà un metodo che appartiene al Guide classe stessa, piuttosto appartiene a a private Classe interiore (Session). Fondamentalmente questo metodo non è comunque raggiungibile.

Devi sistemare entrambi prima che funzionino. O creare un public static metodo nel tuo Guide Classe che di per sé chiama a static metodo nel Session classe o creare un'istanza di Guide e fornire un simile get Metodo a cui è possibile accedere pubblicamente.

Anche tu sembri avere un malinteso static In quanto pensi che significhi che le cose non possono essere aggiornate. Sarebbe final (in altre parole "costante") l'uso di static ha un significato diverso. Ti suggerirei di leggere sul Java final e static utilizzo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top