2017-12-10 1 views
0

私は、リレートレイアウトからなる単純なリサイクルビューを持っています。 OnBindViewHolder(); このリストはポートレートモードで問題なく動作していますが、私がランドスケープに切り替えてスクロールしようとすると、テキストビューが重なり、奇妙な外観が作成されます。ポートレートモードでレイアウトの変更でRecyclerViewが正しく動作しない

In landscape mode after scrollingランドスケープモードで Appears normal in portrait mode 。 コード: -

@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();を行うとマニフェストに設定変更を加える試してみました

@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); 
} 

以下、上記の私のアダプタであるとは、私が呼び出していたから活動です。役立たず。

+1

あなたはonOrientationChangedを待ち受けますか?これは起こるかもしれません。 –

+0

@MarcosVasconcelos私は主な活動の設定変更を聞いていました。心配しないで、問題は解決されました! – Yashovardhan

答えて

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)); 
} 

にコードを変更するには、これが役立つことを願っています。

+0

ありがとう!これはうまくいった! – Yashovardhan

3

addViewのメソッドをonBindViewHolderの中に使用しないでください。 このコールバックは各ViewHolderインスタンスで複数回呼び出されるため、複数のTextViewが追加されます。

あなたのTextViewはrecycler_layoutの一部である必要があります。

+0

ありがとう!これはうまくいった! – Yashovardhan

関連する問題