我有一个重写的Object类(Guide)和一个子类(Session)。
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 必须是静态的,如果我想更新列表,那么这不应该是静态的吗?
这个小小的打嗝是让我远离目标的唯一因素,我们将非常感谢任何帮助。
答案 0 :(得分:0)
你有两个问题。
首先做这样的事情......
Guide.getSessionsByTrack(...);
...表示您尝试通过它的父类名称而不是通过Guide
对象的引用(和实例化)实例来引用方法。在这种情况下,是的,该方法必须声明为static
,因为您没有显式实例化Guide
类的实例。
您遇到的第二个问题是getSessionsByTrack(...)
实际上不是属于Guide
类本身的方法,而是属于private
内部类({{1} })。基本上这种方法无论如何都无法达到。
你需要先解决这两个问题才能解决问题。在Session
类中创建public static
方法,该方法本身在Guide
类中调用static
方法,或创建Session
的实例并提供类似的方法可以公开访问的Guide
方法。
此外,您似乎对get
存在误解,因为您认为这意味着无法更新内容。那将是static
(换句话说'常数')final
的使用具有不同的含义。我建议您阅读Java static
和final
用法。