2012-02-19 80 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