Metodo statico richiesto per l'adattatore personalizzato ListView
-
27-10-2019 - |
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.
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.