0

我有一个带有子类(会话)的重写对象类(指南)。

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

我有一个 ListAdapter 应该处理列表以显示 2 行列表视图:

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方法中的唯一问题不允许我使用this.sessions而该方法是静态的。sessionList必须是静态的,如果我想更新列表怎么办,这不应该是静态的吗?

这个小问题是唯一让我无法实现目标的事情,任何帮助都将不胜感激。

4

1 回答 1

0

你有两个问题。

首先做这样的事情......

Guide.getSessionsByTrack(...);

...意味着您试图通过其父类名称而不是通过Guide对象的引用(和实例化)实例来引用方法。在这种情况下,是的,该方法必须声明为,static因为您没有显式实例化该类的实例Guide

您遇到的第二个问题是它getSessionsByTrack(...)实际上不是属于Guide类本身的方法,而是属于private内部类(Session)。基本上这种方法无论如何都达不到。

您需要修复这两个问题才能正常工作。public static在您的类中创建一个方法,该方法Guide本身调用该类中的static方法,Session或者创建一个实例并提供可以公开访问Guide的类似方法。get

此外,您似乎有一个误解static,因为您认为这意味着无法更新。那将是final(换句话说,“恒定”)的使用static具有不同的含义。我建议您阅读 Javafinalstatic用法。

于 2012-02-19T02:38:18.137 回答