2012-02-19 81 views
0

我有一个覆盖的Object类(指南)与子类(会话)。listview自定义适配器所需的静态方法

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一个ListAdapter:

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是静态的,如果我想更新列表,该怎么办?这不是静态的吗?

这个小小的打嗝是唯一让我从我的目标和任何帮助将不胜感激。

回答

0

你有两个问题。

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

Guide.getSessionsByTrack(...); 

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

你的第二个问题是,getSessionsByTrack(...)实际上不是属于Guide类本身,而是属于private内部类(Session)的方法。基本上这种方法无法实现。

你需要解决这两个问题之前,它将工作。在Guide类中创建一个public static方法,该方法本身在Session类中称为static方法,或者创建Guide的实例并提供可以公开访问的类似get方法。

此外,您似乎对static有误解,因为您认为这意味着无法更新。这将是final(换句话说'常量')static的使用具有不同的含义。我建议你阅读Java finalstatic的用法。

+0

啊,这清除了一切!这是学习Java的过山车。 – platinummonkey 2012-02-19 03:21:06