質問

サブクラス(セッション)を備えたオーバーライドオブジェクトクラス(ガイド)があります。

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行のリストビューを表示するリストアダプターがあります。

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 その方法は静的ですが。しなければなりません セッションリスト 静的に、リストを更新したい場合はどうなりますか?これは静的ではないはずですか?

この小さなしゃっくりは、私を目標から守る唯一のものであり、どんな助けも大歓迎です。

役に立ちましたか?

解決

そこには2つの問題があります。

まずこのようなことをしています...

Guide.getSessionsByTrack(...);

...は、参照された(およびインスタンス化された)インスタンスを介してではなく、親クラス名でメソッドを参照しようとしていることを意味します。 Guide 物体。この場合、はい、方法は static あなたが明示的にインスタンスをインスタンス化していないからです Guide クラス。

あなたが持っている2番目の問題はそれです getSessionsByTrack(...) 実際にはに属する方法ではありません Guide クラス自体、むしろそれはaに属します private 内部クラス(Session)。基本的に、この方法はとにかく到達できません。

それが機能する前に、それらの両方を修正する必要があります。 aを作成します public static あなたの方法 Guide それ自体がaを呼び出すクラス static の方法 Session クラスまたはインスタンスを作成します Guide 同様のものを提供します get 公開できる方法。

また、あなたは誤解しているようです static それは、それが物事を更新できないことを意味すると思うことです。そうでしょう final (言い換えれば「定数」)の使用 static 異なる意味があります。 Javaを読むことをお勧めします finalstatic 利用方法。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top