2017-12-10 15 views
0

상대 레이아웃으로 구성된 간단한 리사이클 뷰를 사용했습니다. OnBindViewHolder(); 이 목록은 세로 모드에서는 잘 작동하는 것처럼 보이지만 가로로 전환하여 스크롤을 시도하면 textviews가 겹쳐 이상한 모양이 생깁니다. 세로 모드에서 가로 모드 Appears normal in portrait mode 에서레이아웃 변경시 RecyclerView가 제대로 작동하지 않습니다.

In landscape mode after scrolling . 코드 : -

@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 내부에 새 TextView를 만들지 마십시오. 이 콜백은 각 ViewHolder 인스턴스에서 여러 번 호출되므로 여러 TextView가 추가됩니다.

TextView는 recycler_layout의 일부 여야합니다.

+0

고마워요! 이것은 효과가있다! – Yashovardhan