0

我对 Android 编程比较陌生,并且遇到了通货膨胀问题。我正在尝试创建一个简单的活动,该活动从先前选择的 ListView 项目中吐出一些描述性字段。

我可以毫无问题地从 ListView 访问源数据,但是显示所选数据的后续活动不起作用。具体来说,以下 XML 布局摘录(在 layout/info.xml 中)和相应的代码会生成一个运行良好的活动,但不会按需要显示字符串“XYZZY”(如上所示,该字符串通常是从动态获取的ListView,但在此示例中简化为硬编码字符串)。

我究竟做错了什么?这是 XML 摘录:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/black"
    android:padding="10dp" >

    <!-- Info text -->
    <TextView
        android:id="@+id/infoname"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="12dp"
        android:gravity="center_horizontal"
        android:textColor="@color/white"
        android:textSize="24sp" />

    ...

</RelativeLayout>

这是java摘录:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.info);

    LayoutInflater li = getLayoutInflater();
    View infoView = li.inflate(R.layout.info, null);

    TextView name = (TextView) infoView.findViewById(R.id.infoname);
    name.setText("XYZZY");

    ...

}
4

2 回答 2

2

通过设置 contentView() 您不需要自己进行充气。您看不到文本的原因是膨胀的布局未添加到视图层次结构中。

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.info);

    TextView name = (TextView) findViewById(R.id.infoname);
    name.setText("XYZZY");

    ...

}
于 2012-04-09T19:47:26.900 回答
0

您不能在同一活动中为同一布局执行 setContentView(R.layout.info) 和膨胀,请选择其中一种方法。对于上面的示例,有正确的代码:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    LayoutInflater li = getLayoutInflater();
    View infoView = li.inflate(R.layout.info, null);

    setContentView(infoView);
    TextView name = (TextView) infoView.findViewById(R.id.infoname);
    name.setText("XYZZY");

    ...

}
于 2012-04-09T20:00:14.220 回答