【问题标题】:How to add RecyclerView to a View如何将 RecyclerView 添加到视图
【发布时间】:2015-12-18 10:37:47
【问题描述】:

我有一个自定义视图扩展RelativeLayout,我想在其中添加一个RecyclerView。但是recyclerView无法显示。

如何解决?谢谢!

代码:

LineChart.java

public class LineChart extends RelativeLayout {

    RecyclerView mRecyclerView;


    public LineChart(Context context) {
        super(context);
        init(context, null);
    }


    public LineChart(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }


    public LineChart(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }


    protected void init(Context context, @Nullable AttributeSet attrs) {
        setWillNotDraw(false);
        initInside();
    }


    protected void initInside() {
        View v = inflate(getContext(), R.layout.line_chart_recyclerview, null);

        LineChart.LayoutParams params = new LineChart.LayoutParams(
            getWidth() / 2, getHeight());
        params.addRule(LineChart.ALIGN_PARENT_RIGHT);
        addView(v, params);

        mRecyclerView = (RecyclerView) findViewById(R.id.lineChartRecyclerView);

        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");
        list.add("~~~");
        LineChartAdapter lineChartAdapter = new LineChartAdapter(getContext(),
            list);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mRecyclerView.setAdapter(lineChartAdapter);
    }


    @Override protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }
}

LineChartAdapter.java

public class LineChartAdapter
    extends RecyclerView.Adapter<LineChartViewHolder> {

    private List<String> mList;
    private Context mContext;


    public LineChartAdapter(Context context, List<String> list) {
        this.mContext = context;
        this.mList = list;
    }


    @Override
    public LineChartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(mContext)
                                  .inflate(R.layout.item_line_chart, parent,
                                          false);
        return new LineChartViewHolder(itemView);
    }


    @Override
    public void onBindViewHolder(LineChartViewHolder holder, int position) {
        holder.mTextView.setText(String.valueOf(position));
    }


    @Override public int getItemCount() {
        return mList == null ? 0 : mList.size();
    }
}

LineChartViewHolder.java

public class LineChartViewHolder extends RecyclerView.ViewHolder {

    protected TextView mTextView;


    public LineChartViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(
            R.id.text1024);
    }
}

【问题讨论】:

    标签: java android android-recyclerview android-view android-custom-view


    【解决方案1】:

    我想,我知道原因。

        View v = inflate(getContext(), R.layout.line_chart_recyclerview, null);
    
        LineChart.LayoutParams params = new LineChart.LayoutParams(
            getWidth() / 2, getHeight());
        params.addRule(LineChart.ALIGN_PARENT_RIGHT);
        addView(v, params);
    

    这里,getWidth()getHeigth() 仍然为 0。因此您的视图将具有 (0;0) 大小 要解决此问题,我建议将此部分替换为

        LayoutInflater.from(context).inflate(R.layout.line_chart_recyclerview, this);
    

    如果有帮助,请告诉我。

    【讨论】:

    • 是的,它有帮助。谢谢! :) 还有一个问题要征求意见。我想在 RecyclerView 中添加一些规则,例如 ALIGN_PARENT_RIGHT 并更改它的大小,我应该在 onDraw(Canvas c) 期间这样做吗?
    • 嗨,@RockerFlower。别客气!关于额外规则和宽度 - 我建议在 xml 中正确设置它们。为了使其“正确”和“半尺寸” - 我相信,它可以像这样存档:在您的 RelativeLayout(根之一)内将 RecyclerView 嵌套到水平 LinearLayout:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多