使用带有<merge>和<include>标记的自定义视图时,findViewById崩溃</include> </merge>

时间:2011-04-11 23:51:41

标签: java android merge android-layout

我正在尝试使用XML创建自定义视图,然后检索其属性并对其进行编辑。此自定义视图会多次添加到test2视图中,每个视图都有不同的ID。我试图检索其中一个自定义视图(player_1)的ID,然后获取TextView(player_name),并编辑其属性,而不是其他视图,如player_2 id视图。

但我不确定这是否可能?它渲染得很好,但每次我尝试在代码中执行此操作时都会出错。我真的不确定如何处理这个问题,我似乎无法通过膨胀工作来测试它。有什么想法吗?

谢谢!

Game.java

setContentView(R.layout.test2);

View player1 = (View) findViewById(R.id.player_1);

TextView player1Name = (TextView) player1.findViewById(R.id.player_name);

player1Name.setText("John");

test2.xml

<include
    layout="@layout/player_view"
    android:id="@+id/player_1"
/>
<include
    layout="@layout/player_view"
    android:id="@+id/player_2"
/>

player_view.xml

<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:player="http://schemas.android.com/apk/res/com.example.android.merge">
<LinearLayout
android:id="@+id/top_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
>
        <TextView
        android:id="@+id/player_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        >
        </TextView>
   </LinearLayout>
</merge>

这是player_view.xml的缩减版本,如果需要,我可以发布更多内容。

此外,如果它甚至在eclipse中打印出错误消息,我还没有解决,它进入调试模式,并没有进一步解释问题是什么。

1 个答案:

答案 0 :(得分:1)

您的player_view.xml类型未知,因此 include 会混淆视图的类型。尝试下一步: 使用或创建新的PlayerView类,可与player_view.xml合并。

将test2.xml编辑为:

<PlayerView
    android:id="@+id/player_1"
/>
<PlayerView
    android:id="@+id/player_2"
/>

然后在您的代码中将其膨胀如下:

setContentView(R.layout.test2);

PlayerView player1 = (PlayerView) findViewById(R.id.player_1);
LayoutInflater inflate = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflate.inflate(R.layout.player_view, player1);

对于player2也这样做。