(再循环)列表视图 - 计算高度((recycle) listview - calculate he

2019-10-23 07:27发布

我在我的Android应用程序的多个列表,包含这些(再循环)的列表视图的活动还包含其他内容。 把下面的内容列表视图没有任何自定义建模工作正常。 然而,在列表中滚动时,它只是滚动列表,从而显示出约1或2项,而我们想滚动整个活动,让内容向上移动并显示完整列表。

为了使活动滚动的,我们需要一个滚动型,这正好有点对设计指南,我知道,但我需要它。

要完成这件事,我用这个解决方案: https://stackoverflow.com/a/13796159/2901207

它完美的作品,只要在列表视图的高度设定为等于在列表视图中的项目所需要的高度。 所以总会有我的问题,我如何计算这个高度。

现在,我在一点点运气,在列表中的项目具有相同的高度,所以带着几分试验和错误,我可以像这样实现:

recyclerView.setMinimumHeight(posts.size() * 190);

然而,这并没有真正的工作,因为我们有不同的分辨率和屏幕尺寸。 在xhdpi这会工作,但我xxhdpi仍然需要4个项目的空间。

一个解决方案,我发现 :

int totalHeight = 0;

for (int i = 0; i < mAdapter.getCount(); i++) {
    View mView = mAdapter.getView(i, null, listView);

    mView.measure(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),

            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    totalHeight += mView.getMeasuredHeight();
    Log.w("HEIGHT" + i, String.valueOf(totalHeight));

}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
        + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();

然而,这不与工作RecyclerView.Adapter<myAdpater.MyViewHolder>因为它不包含getView()方法。 (而不是getDividerHeight()方法eather)。

这是怎么我的适配器之一是这样的:

public class ResponsesAdpater extends RecyclerView.Adapter<ResponsesAdpater.MyViewHolder> {

private LayoutInflater inflrater;
List<Post> posts = Collections.emptyList();
Context context;
private ClickListenerResponseList listener;

public ResponsesAdpater(Context context, List<Post> posts) {
    this.context = context;
    inflrater = LayoutInflater.from(context);
    this.posts = posts;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflrater.inflate(R.layout.responses_row, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Post post = posts.get(position);
    holder.lblMainText.setText(post.text);
}

public void setClickListener(ClickListenerResponseList listener)
{
    this.listener = listener;
}

@Override
public int getItemCount() {

    return posts.size();
}

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    TextView lblMainText;
    ImageView imgIcon;

    public MyViewHolder(View itemView) {
        super(itemView);
        lblMainText = (TextView) itemView.findViewById(R.id.lblPostMainText);
        imgIcon = (ImageView) itemView.findViewById(R.id.imgIcon);
    }


    @Override
    public void onClick(View v) {
        if(listener != null)
        {
            listener.ResponseClicked(v, getAdapterPosition());
        }
    }
}

public interface ClickListenerResponseList{
    void ResponseClicked(View view, int position);
}

}

另一个解决方案是这样的 ,但是从RecyclerView延伸的时候,我们没有的onDraw方法重写。

帮助将不胜感激!

文章来源: (recycle) listview - calculate height