这让我很困惑。让我们说我有这两种情况:
第一种情况: my_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ..>
<CardView id="@+id/myCardView" ../> // or any other view
</RelativeLayout>
在代码中:
.. onCreate() {
View view = inflater.inflate(R.layout.my_layout, container, false);
myCardView = (CardView) view.findViewById(R.id.myCardView);
}
第二种情况: my_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<CardView ../>
在代码中:
.. onCreate() {
myCardView = (CardView) inflater.inflate(R.layout.my_layout, container, false);
}
要充气并获取CardView对象,何时应该使用第一个场景?何时使用第二个场景? 请注意,在第一个场景中,我从不对RelativeLayout对象做任何事情。它仅用于获取CardView对象。
我问的原因是我在很多教程中看到了第一个场景,但是从来没有解释过为什么额外的封装布局实际存在。
是否存在上述第一个示例比第二个示例更有意义的情况?
发布编辑:请您考虑使用RecyclerView.ViewHolder模式评估我的问题? 帖子编辑2:
我使用ViewHolder模式中的第一个场景。
public class EntryViewHolder extends RecyclerView.ViewHolder {
public CardView cv;
public EntryViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.entries_card_view);
}
}
尽管如此,即使在这种情况下我也从不使用封装的RelativeLayout。我只用它来调用findViewById(..)来获取CardView对象。
答案 0 :(得分:2)
只要您的XML布局中包含多个子视图,就会使用第一个场景。一些TextViews,EditTexts,Spinners等,你需要为用户组合一个可呈现的页面。 <RelativeLayout
和其他布局标记有助于组织其中的子视图,在本例中为彼此“相对”。我会坚持这种做法,而不是你的第二种情况。
我不确定我以前见过的是你的第二个场景。膨胀布局然后将整个布局转换为CardView似乎很奇怪。我可以将它与之相关的最接近的事情是,当您为自定义适配器视图创建XML时,您可能会在其中创建卡对象列表。
Here是有关布局的有用链接。