Statische Methode, die für den benutzerdefinierten ListView -Adapter erforderlich ist
-
27-10-2019 - |
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.
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.