Как программно скрыть Android, но не все, элементы просмотра в выводе XML? - PullRequest
4 голосов
/ 28 мая 2011

Я пытаюсь запрограммировать приложение для игры в гольф на дисках Eclipse для моего телефона Android.Я хотел бы настроить его на 6 игроков, но в основном это будут 2 человека для игры.Данные хранятся в sqlite DB, и я использую SimpleCursorAdapter, чтобы заполнить данные для дыр, которые уже были оценены.вот этот код:

private void fillData() {
    Cursor notesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(notesCursor);

    // Create an array to specify the fields we want to display in the list (only TITLE)

    String[] from = new String[]{DiscGolfDbAdapter.KEY_HOLE,
            DiscGolfDbAdapter.KEY_PAR,
            DiscGolfDbAdapter.KEY_TOM_HOLE,
            DiscGolfDbAdapter.KEY_TOM_GAME,
            DiscGolfDbAdapter.KEY_CRAIG_HOLE,
            DiscGolfDbAdapter.KEY_CRAIG_GAME,
            DiscGolfDbAdapter.KEY_TOMS_POSITION,
            DiscGolfDbAdapter.KEY_SKIP_PLAYER
    };

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{R.id.schole, R.id.scpar, R.id.scth, R.id.sctg, R.id.scch, R.id.sccg, R.id.sctp,
            R.id.skip};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter notes = 
        new SimpleCursorAdapter(this, R.layout.hole_info, notesCursor, from, to);
    setListAdapter(notes);
}

В результате поиска в Интернете я обнаружил две возможности, которые ДОЛЖНЫ работать, но не работают.

Сначала я попробовал атрибут XML: android.visibility.Похоже, что это в порции представления, которое я пытаюсь «проверить» скрыть:

<LinearLayout android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android.visibility="GONE">
    <TextView android:id="@+id/scch"
        android:layout_width="45dip"
        android:gravity="right"
        android:textSize="25sp"
        android:layout_height="wrap_content"/>
    <TextView android:id="@+id/sccg"
        android:layout_width="45dip"
        android:gravity="right"
        android:textSize="25sp"
        android:layout_height="wrap_content"/>
</LinearLayout>

Я пробовал это с «Ушел», «Ушел» и «ушел».Никто из них не работает в эмуляторе затмения ИЛИ на моем реальном телефоне.Таким образом, нет смысла пытаться параметризовать этот атрибут.

Далее я попытался установить атрибут XML для android: layout_height в значение "0dip".Это действительно работает в эмуляторе и на моем телефоне, когда он жестко кодируется.

Затем я перешел к следующему логическому шагу (как я его вижу), сохраняя параметр в БД, чтобы я мог «показать» или«не показывать» пункт в зависимости от условий в записи.Итак, я сохранил поле в БД с двумя значениями «0dip» и «wrap_content».Я передаю их в макет, как показано в java выше как R.id.skip.Я также добавил их в вывод только для проверки того, что они действительно есть.Вот этот XML:

<LinearLayout android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="@+id/skip">
    <TextView android:id="@+id/scch"
        android:layout_width="45dip"
        android:gravity="right"
        android:textSize="25sp"
        android:layout_height="wrap_content"/>
    <TextView android:id="@+id/sccg"
        android:layout_width="45dip"
        android:gravity="right"
        android:textSize="25sp"
        android:layout_height="wrap_content"/>
     </LinearLayout>

     <TextView android:id="@+id/skip"
    android:gravity="center"
    android:layout_width="315dip"
    android:textSize="10sp"
    android:layout_height="wrap_content"/>

В приведенном выше тесте, как через эмулятор Eclipse, так и на моем телефоне с Android, последний TextView подтверждает, что БД содержит либо «0dip», либо «wrap_content», НО LinearLayout с:

      android:layout_height="@+id/skip">

ведет себя так, как если бы он был "0dip" ВСЕ ВРЕМЯ.Другими словами, я не могу ПРОГРАММНО «повлиять на атрибут XML для android: layout_height.

Если есть лучший / более стандартный способ выполнения того, что я пытаюсь сделать, пожалуйста, поделитесь - НО БЫТЬ ЧИСТЫМ.новый, поэтому ПРИМЕРЫ КОДА будут работать лучше всего для меня.


29 мая - Мне кажется (основываясь на тестировании), что вы не можете изменить атрибуты макета для макета, указанного в этом коде:

SimpleCursorAdapter notes = new SimpleCursorAdapter(this, 
                                                    R.layout.hole_info, 
                                                    notesCursor, from, to);
setListAdapter(notes);

Все, что я пробую, приводит к некоторой ошибке или другой. Итак, я видел примеры пользовательских адаптеров списков, в которых эти атрибуты изменены, поэтому я пытаюсь преобразовать их в пользовательский адаптер списков.

Ответы [ 3 ]

14 голосов
/ 28 мая 2011

Почему бы не сделать это в коде?

LinearLayout ll = (LinearLayout)findViewById(R.id.your_layout_id);
ll.setVisibility(View.GONE);
2 голосов
/ 30 мая 2011

Ваш код макета XML

android.visibility="GONE"

должен быть

android:visibility="GONE"

Изменение видимого для LinearLayout, как у Габриэля Негу, скажем:

LinearLayout ll = (LinearLayout) findViewById (R.id.your_layout_id);ll.setVisibility (View.GONE);

или изменение высоты LinearLayout:

LinearLayout ll = (LinearLayout)findViewById(R.id.your_layout_id);
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) ll.getLayoutParams();
lp.height = 0; // or lp.height = LinearLayout.LayoutParams.WRAP_CONTENT;
ll.setLayoutParams(lp);
0 голосов
/ 26 июля 2013

Как насчет решения этого парня http://enjoyandroid.wordpress.com/2012/03/12/customizing-simple-cursor-adapter/

Вид работал на меня.

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