Android: редактировать текстовое представление, определенное в xml - PullRequest
1 голос
/ 20 февраля 2011

Я сижу не менее 4 часов, пытаясь решить эту проблему.

Чтобы понять это, вам нужно знать 3 файла:

eggCatcher.java, который расширяет Activity, этот класс используется не намного сохранение состояния игры и отображение меню опций.

eggCatcherView.java, который расширяет SurfaceView и содержит «игру».

eggCatcher_layout.xml, который показан ниже:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layouten">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <easter.fun.EggCatcherView
            android:id="@+id/eggcatcher"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

        <RelativeLayout android:id="@+id/relativeLayout1" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true">

            <TextView android:text="Score: " 
                android:id="@+id/totalscore" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true">
             </TextView>

             <TextView android:text="Bonus: "
                android:id="@+id/bonus" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true">
        </TextView>

        </RelativeLayout>
    </FrameLayout>
</LinearLayout>

Как показано в файле xml, EggCatcherView помещается в файл xml. Когда приложения запускаются, onCreate вызывает setContentView (layout.eggcatcher_layout);

Мой вопрос сейчас: Как я могу, из EggCatcherView.java получить доступ и редактировать TextViews, определенные в xmlfile?

если бы это было в EggCatcher.java, это было бы легко, просто используйте findViewById (id.bonus), но из внутри SurfaceView кажется немного сложнее.

Надеюсь, я все прояснил, если ты не понимаешь, просто спроси!

// Мик

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Я нашел это лучшим способом:

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:id="@+id/test"/>
</LinearLayout>

TextView test = (TextView) findViewById(R.id.test);
test.setText("test");
0 голосов
/ 10 января 2013

Если я правильно понимаю, вы хотите получить доступ к представлениям в окружающей деятельности?Это похоже на плохую архитектуру.Я думаю, что было бы лучше либо передать обратный вызов в EggCatcherView, который может запускать методы в Activity, которые, в свою очередь, работают с TextViews, либо запускать какие-то события вверх.

0 голосов
/ 20 февраля 2011

Я думаю, что вы должны получить родительское представление, и тогда вы можете использовать findViewById() (вы уверены, что вы не можете просто использовать этот метод в любом случае, так как SurfaceView является подклассом View и наследует findViewById() из него?).

Для использования родителя вы делаете что-то вроде:

ViewParent vp = eggCatcherView.getParent();
FrameLayout fl = (FrameLayout) vp;
TextView tx  = (TextView) fl.findViewById(R.id.bonus);

Конечно, вам нужно проверить, действительно ли ViewParent является экземпляром FrameLayout.

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