Android 更改RecyclerView';改变方向时的布局
我正在使用Android 更改RecyclerView';改变方向时的布局,android,android-recyclerview,android-orientation,gridlayoutmanager,Android,Android Recyclerview,Android Orientation,Gridlayoutmanager,我正在使用GridLayoutManager进行RecyclerView。我显示的是单栏横向和七栏横向。 使用: 但问题是用于肖像的布局对于景观来说是不可行的。 那么,如何在配置更改时更改RecyclerView的布局呢。 或者是否有其他解决方案???这是解决方案,请向您传递一个描述当前方向的标志 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationCha
GridLayoutManager
进行RecyclerView
。我显示的是单栏横向和七栏横向。
使用:
但问题是用于肖像的布局对于景观来说是不可行的。
那么,如何在配置更改时更改RecyclerView
的布局呢。
或者是否有其他解决方案???这是解决方案,请向您传递一个描述当前方向的标志
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
//Update the Flag here
orientationLand = (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? true : false);
}
在适配器类中:
@Override
public CalenderSessionHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
//User Flag here to change layou
View itemView = LayoutInflater.from(parent.getContext()).inflate(orientationLand ? R.layout.item_calender_session_land : R.layout.item_calender_session_port, null);
return new CalenderSessionHolder(itemView);
}
确保正确处理视图Id以避免异常
更新:
如果您有两个视图保持架:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
if (orientationLand)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_calender_session_land , parent, false);
return new LandViewHolder(v);
}
else
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_calender_session_port, parent, false);
return new PortViewHolder(v);
}
return null;
}
内绑定视图持有者
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
if (holder instanceof PortViewHolder)
{
PortViewHolder portHolder = (PortViewHolder) holder;
//Initialize Views here for Port View
} else if (holder instanceof LandViewHolder)
{
LandViewHolder landViewHolder = (LandViewHolder) holder;
//Initialize Views here for Land View
}
}
你找到解决方案了吗?@Sufian是的,请检查我下面的答案。这很好,但如果有人,像我一样,在旋转时使活动不可中断,则需要定义两个
视图持有者
s(一个用于港口,另一个用于陆地)。否则,某些项目将遵循旧方向,而其他项目将遵循当前方向。@Sufian请为您的问题检查更新的答案。。希望它对您有用。:)不,我所做的是为每个方向创建单独的视图持有者,如ViewHolderPort
和ViewHolderLand
。然后,如果方向是纵向,我将从getItemViewType()
返回纵向和横向的不同值。这样做将迫使适配器在调用notifyDataSetChanged()
时创建新的ViewHolder。您最初的解决方案与我实际做的非常接近。:)不,只是布局不同。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
if (holder instanceof PortViewHolder)
{
PortViewHolder portHolder = (PortViewHolder) holder;
//Initialize Views here for Port View
} else if (holder instanceof LandViewHolder)
{
LandViewHolder landViewHolder = (LandViewHolder) holder;
//Initialize Views here for Land View
}
}