Frage

Ich habe eine übergeordnete Objektklasse (Leitfaden) mit einer Unterklasse (Sitzung).

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

Ich habe einen Listadapter, der die Liste verarbeiten sollte, um eine 2-Zeilen-Listansicht anzuzeigen:

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

In meiner Hauptaktivität versuche ich, die Liste mit dem Listenadapter anzuzeigen:

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

Mein einziges Problem in der Guide.GetSessionsBytrack Die Methode erlaubt mir nicht zu verwenden Dies.Sessions während diese Methode statisch ist. Muss der Sitzungsliste Sei statisch, was ist, wenn ich die Liste aktualisieren wollte, sollte das nicht statisch sein?

Dieser kleine Schluckauf ist das einzige, was mich von meinem Ziel hält, und jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Sie haben dort zwei Probleme.

Erstens so etwas ...

Guide.getSessionsByTrack(...);

... bedeutet, dass Sie versuchen, auf eine Methode nach dem Namen der Elternklassen zu verweisen und nicht über eine referenzierte (und instanziierte) Instanz von a Guide Objekt. In diesem Fall muss die Methode als deklariert werden static Weil Sie nicht explizit eine Instanz der Guide Klasse.

Das zweite Problem, das Sie haben, ist das getSessionsByTrack(...) Ist nicht tatsächlich eine Methode, die zum gehört Guide Klasse selbst, sondern gehört zu einem private innere Klasse (Session). Grundsätzlich ist diese Methode sowieso nicht erreichbar.

Sie müssen beide reparieren, bevor es funktioniert. Entweder erstellen a public static Methode in Ihrem Guide Klasse, die an sich a nennt a static Methode in der Session Klasse oder erstellen eine Instanz von Guide und ein ähnliches liefern get Methode, auf die öffentlich zugegriffen werden kann.

Sie scheinen auch ein Missverständnis darüber zu haben static In diesem Fall glauben Sie, dass die Dinge nicht aktualisiert werden können. Das wäre final (mit anderen Worten 'konstant') die Verwendung von static hat eine andere Bedeutung. Ich würde vorschlagen, dass Sie sich über die Java informieren final und static Verwendungszweck.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top