新手任务:使用和不使用实际布局来扩展xml文件

时间:2016-06-04 04:29:21

标签: android layout android-inflate

这让我很困惑。让我们说我有这两种情况:

第一种情况: 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对象。

1 个答案:

答案 0 :(得分:2)

只要您的XML布局中包含多个子视图,就会使用第一个场景。一些TextViews,EditTexts,Spinners等,你需要为用户组合一个可呈现的页面。 <RelativeLayout和其他布局标记有助于组织其中的子视图,在本例中为彼此“相对”。我会坚持这种做法,而不是你的第二种情况。

我不确定我以前见过的是你的第二个场景。膨胀布局然后将整个布局转换为CardView似乎很奇怪。我可以将它与之相关的最接近的事情是,当您为自定义适配器视图创建XML时,您可能会在其中创建卡对象列表。

Here是有关布局的有用链接。