如何使单个视图全局可访问?

时间:2011-05-04 10:35:10

标签: android view

有没有办法让全局访问单个View(在本例中为TextView)?我尝试将TextView放在它自己的XML文件中,如下所示:

<!-- File: list_header.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium">
</TextView>

但是,在尝试访问此TextView时(使用mListHeader = (TextView) findViewById(R.id.list_header)),我收到了null

我认为我似乎是使用这种方法的一些例子,所以我认为它应该是可能的。如果没有,我很乐意在找到另一种方法时获得一些帮助。

也许这个问题应该另外标注,因为我的主要问题是如何解决一个特定的问题:

有问题的TextView应该用作ListView中的标题。此标头将用于许多ListView,因此我想使用XML设置它的属性。我可以将它放在与ListView相同的XML文件中,但我不希望TextView以任何其他方式显示为ListView的标题。解决问题的一种方法是将TextView放在它自己的XML文件中,正如我试图做的那样,但它没有用。

现在,我不确定Stack Overflow在这种情况下的做法,但无论如何,我想要回答这两个问题。

3 个答案:

答案 0 :(得分:1)

尝试使用&lt; include /&gt;或者&lt; merge /&gt;在布局中使用多个布局中的单个控件定义。有一个包含here的教程。

答案 1 :(得分:0)

对视图进行充气并将其添加为ListView中的标题:

  View header = getLayoutInflater().inflate(R.layout.list_header, null);
  list.addHeaderView(header);
  BaseAdapter adapter = getAdapter(); 
  list.setAdapter(adapter); //the header view must be added before you set the adapter

答案 2 :(得分:0)

您收到空,因为您尝试查找的ID View不在您使用setContentView设置的视图层次结构中。

因此,您有两个选择:

  1. 使用<include />标记将您想要的布局包含在使用setContentView
  2. 设置的较大布局中
  3. 使用LayoutInflaterView进行充气,并将其添加到setContentView
  4. 中创建的现有视图层次结构中

    使View对象本身(不是布局)全局可访问,即将其放在static字段中,将导致内存泄漏。