Android listview自定义适配器所需的静态方法

Android listview自定义适配器所需的静态方法,android,listadapter,baseadapter,Android,Listadapter,Baseadapter,我有一个覆盖对象类(Guide)和一个子类(Session) Guide.getSessionsByTrack方法中唯一的问题是,当该方法是静态的时,不允许我使用this.sessions。会话列表必须是静态的,如果我想更新列表,这不是静态的吗 这个小小的打嗝是唯一让我无法实现目标的东西,任何帮助都将不胜感激。你有两个问题 首先做这样的事情 Guide.getSessionsByTrack(...); …表示您正试图通过方法的父类名而不是通过Guide对象的引用(和实例化)实例来引用方法。在这

我有一个覆盖对象类(Guide)和一个子类(Session)

Guide.getSessionsByTrack方法中唯一的问题是,当该方法是静态的时,不允许我使用this.sessions。会话列表必须是静态的,如果我想更新列表,这不是静态的吗


这个小小的打嗝是唯一让我无法实现目标的东西,任何帮助都将不胜感激。

你有两个问题

首先做这样的事情

Guide.getSessionsByTrack(...);
…表示您正试图通过方法的父类名而不是通过
Guide
对象的引用(和实例化)实例来引用方法。在这种情况下,是的,该方法必须声明为
static
,因为您没有显式地实例化
Guide
类的实例

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

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


另外,您似乎对
static
有误解,因为您认为这意味着事物无法更新。这将是
final
(换句话说是“常量”)
static
的用法有不同的含义。我建议你仔细阅读Java
final
static
的用法。

啊,这把一切都搞定了!这是学习Java的过山车。
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(...);