Статический метод, необходимый для ListView Custom Adapter

StackOverflow https://stackoverflow.com/questions/9346038

Вопрос

У меня есть первичный класс объекта (руководство) с подклассом (сеанс).

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 Применение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top