Сбой findViewById при использовании пользовательского представления с тегами <merge>и <include> - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь создать собственное представление с использованием XML, затем извлечь его свойства и отредактировать их. Это пользовательское представление добавляется в представление test2 несколько раз с разными идентификаторами для каждого. Я попытался получить идентификатор для одного из этих пользовательских представлений (player_1), затем получить 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 Ответ

1 голос
/ 19 августа 2011

Ваш 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...