RecyclerView在布局更改时无法正常工作

时间:2017-12-10 14:57:32

标签: java android xml android-recyclerview

我有一个简单的回收站视图,包含相对布局。除了在OnBindViewHolder();添加文字视图外,目前布局中没有任何内容 该列表似乎在纵向模式下工作正常但是当我切换到横向并尝试滚动时,文本视图重叠并创建一个奇怪的外观。

In landscape mode after scrolling 在横向模式下 Appears normal in portrait mode 在纵向模式下。 代码:

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RelativeLayout v = (RelativeLayout) LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recycler_layout,parent,false);
    context = parent.getContext();

    ViewHolder vh = new ViewHolder(v);

    return vh;
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
    TextView tv = new TextView(context);
    tv.setText(mDataSet.get(position));
    tv.setTextSize(20);
    tv.setPadding(5,20,5,20);
    holder.mLayout.addView(tv);
}

上面是我的适配器,下面是我打电话的活动 -

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_to_do_list);
    mRecyclerView = findViewById(R.id.mainList);
    mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new MyAdapter(dataset);
    mRecyclerView.setAdapter(mAdapter);
    mRecyclerView.refreshDrawableState();
    //testing
    for(int i=0;i<20;i++)
        dataset.add("Data "+(i+1));
}

我已经尝试在配置更改上执行refreshDrawableState();并向清单添加配置更改。没有用。

2 个答案:

答案 0 :(得分:3)

不要在addView内创建新的TextView并使用onBindViewHolder方法。 在每个ViewHolder实例上将多次调用此回调,因此将添加多个TextView。

您的TextView应该是recycler_layout的一部分。

答案 1 :(得分:1)

将文字视图作为列表项目布局的一部分。

class ViewHolder{
        TextView tv;
        ViewHolder(View v){
            tv = (TextView) v.findViewById(<textview_id>);
       }
}

然后更改onBindViewHolder()

中的代码
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
    holder.tv.setTextSize(20);
    holder.tv.setPadding(5,20,5,20);
    holder.tv.setText(mDataSet.get(position));
}

希望这会有所帮助。