Статический метод, необходимый для ListView Custom Adapter
-
27-10-2019 - |
Вопрос
У меня есть первичный класс объекта (руководство) с подклассом (сеанс).
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;
}
У меня есть списки, который должен обрабатывать список для отображения 2-линии ListView:
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;
}
}
В моем основном деятельности я пытаюсь отобразить список, используя адаптер списка:
...
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);
...
Моя единственная проблема в Guide.getSessionsBytrack Метод не позволяет мне использовать это в то время как этот метод статичен. Должен SessionList Будь статичным, что, если я хочу обновить список, разве это не должно быть статичным?
Этот маленький икота - единственное, что удерживает меня от моей цели, и любая помощь будет очень оценена.
Решение
У вас есть две проблемы там.
Во -первых, делая что -то подобное ...
Guide.getSessionsByTrack(...);
... означает, что вы пытаетесь ссылаться на метод по имени родительского класса, а не через ссылочный (и экземпляр) экземпляра Guide
объект. В этом случае, да, метод должен быть объявлен как static
Потому что вы явно не испытываете экземпляра Guide
учебный класс.
Вторая проблема, которую у вас есть, это то, что getSessionsByTrack(...)
на самом деле не является методом, который принадлежит Guide
Сам класс, скорее он принадлежит private
Внутренний класс (Session
) По сути, этот метод в любом случае не доступен.
Вам нужно исправить оба из них, прежде чем это сработает. Либо создайте public static
Метод в вашем Guide
класс, который сам по себе называет static
Метод в Session
класс или создайте экземпляр Guide
и предоставить аналогичный get
Метод, который можно получить публично.
Также, кажется, у вас есть недоразумение о static
в том, что вы думаете, что это означает, что все не может быть обновлено. Это было бы final
(Другими словами «постоянная») использование static
имеет другое значение. Я бы посоветовал вам прочитать на Java final
а также static
Применение.