java - 如何将 RecyclerView 添加到 View

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

我有一个扩展 RelativeLayout 的自定义 View ,我想在其中添加一个 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);
    }
}

最佳答案

我想,我知道原因了。

    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。因此您的 View 将具有 (0;0) 大小 要解决此问题,我建议将此部分替换为

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

如果有帮助,请告诉我。

关于java - 如何将 RecyclerView 添加到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353655/

相关文章:

android - Galaxy 选项卡无法连接到 ADB

android - RecyclerView 页脚未显示

java - 如何在每次点击按钮时显示 Admob 插页式广告?

java - 格式化日志的正确方法

android - 不想在卸载后丢失 Android 上的数据

java - RecyclerView notificationItemMoved() 复制移动的 View

android - 回收者 View 中每个项目的不同项目 View

java - Recycler View 不显示从 Firestore 数据库获取的数据

java - 为什么集合的输出与列表相同。我认为这会有所不同,因为集合是无序的

java - 交换器 : JVM never stops