1

ライブラリStickyListHeadersを使用していますが、特定のアプリケーションで機能させる方法を理解するのに苦労しています。2 番目のリスト項目のみに固定ヘッダーを付けたい。getHeaderId() メソッドをオーバーライドして 1 を返すと、2 番目の項目の先頭ではなく、リストの一番上にヘッダーが配置されます。スクロールも本当にびくびくしています。このライブラリを使用して、何が起こっているのかを知っている人はいますか?

MergeAdapter を使用しているので、設定した ListView の位置を取得する際に問題が発生する可能性がありますか?

これが私のアダプターコードです:

private class ProfileMergeAdapter extends MergeAdapter implements StickyListHeadersAdapter{

    @Override
    public View getHeaderView(int position, View convertView, ViewGroup parent) {

        LayoutInflater nameInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = (RelativeLayout) nameInflater.inflate(R.layout.name_line, null);
        convertView.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
        profilePhotoBottom = (ImageView) convertView.findViewById(R.id.profile_pic_bottom);
        TextView userName = (TextView) convertView.findViewById(R.id.userName);
        userName.setText(Utility.userName);
        profilePhotoBottom.setImageBitmap(photoBMPbot);
        return convertView;
    }

    @Override
    public long getHeaderId(int position) {
        return 1;
    }

}
4

2 に答える 2

5

@Override public long getHeaderId(int position) { return 1; }

ここで 1 を返すと、すべての項目 (すべての位置) の headerId が 1 になります。したがって、最上部に 1 つのヘッダーのみが取得されます。この動作は正しいです。

同じヘッダーの下にグループ化する必要がある項目に対してのみ、同じ ID を返す必要があります。たとえば、position/3 を返すとします。3 項目ごとにヘッダーがあります。

これで問題が解決することを願っています:)

于 2013-01-30T14:23:30.983 に答える
0

サンプルでやりたいことを正確に行ったので、サンプルに従う必要があります。

@Override
public long getHeaderId(int position) {
  if (position == 0) {
    return -1;
  } else {
    return 1;
  }
}

これにより、最初の位置がスキップされ、位置 1 の見出しが返されます。

于 2015-10-17T15:16:12.490 に答える