我正在尝试使用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中打印出错误消息,我还没有解决,它进入调试模式,并没有进一步解释问题是什么。
答案 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也这样做。