Как установить несколько кнопок в соответствии с ответом JSON? - PullRequest
0 голосов
/ 11 апреля 2019

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

Это означает, что если видимость истинна, то кнопка должна быть видимой, а если кнопка false - отключена Это работает, но если какая-то кнопка имеет видимость false, то в макете есть пробел. Итак, как настроить макет динамически, чтобы все видимые кнопки отображались в строке.

Я создал три линейных макета, каждая из которых содержит три кнопки. Теперь, если в ответе json указано видимость false для какой-либо кнопки, я отключил видимость для этой кнопки.

  if (Menuname.equals("StudentDailyDiary")) {
                                studentdiary.setVisibility(View.VISIBLE);

moreOptionLayout.setVisibility(View.VISIBLE);
                                hrview.setVisibility(View.VISIBLE);
                                rlleftview.setVisibility(View.VISIBLE);
                                rlrightview.setVisibility(View.VISIBLE);
                            }
                            if (Menuname.equals("BookSearch")) {
                                studlibrary.setVisibility(View.VISIBLE);

moreOptionLayout.setVisibility(View.VISIBLE);
                                hrview.setVisibility(View.VISIBLE);
                                rlleftview.setVisibility(View.VISIBLE);
                                rlrightview.setVisibility(View.VISIBLE);
                            }

Скажем, в первом макете есть три кнопки, из которых вторая кнопка имеет видимость false, тогда в позиции второй кнопки должна быть размещена третья кнопка, не должно быть пустого пространства для кнопок во всем макете. То есть, если третья кнопка имеет видимость false, то первая кнопка второго макета должна быть установлена ​​на позиции третьей кнопки.

enter image description here

Ответы [ 5 ]

1 голос
/ 11 апреля 2019

Я думаю, что правильной ViewGroup для использования является GridLayout.

Вот простой пример:

activity_main.xml

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="80dp"
    android:gravity="center"
    android:numColumns="3"
    android:stretchMode="columnWidth" />

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val numbers = arrayOf("BUTTON1", "BUTTON2", "BUTTON4", "BUTTON5", "BUTTON6")

        val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numbers)

        gridView.adapter = adapter

        gridView.onItemClickListener = AdapterView.OnItemClickListener {
            parent, v, position, id ->
            Toast.makeText(applicationContext, (v as TextView).text, Toast.LENGTH_SHORT).show()
        }
    }
}

В этом примере используется String, но вы можете сделать адаптер из того, что вам нужно.Теперь, после ответа JSON, просто заполните свой массив и установите его для адаптера.

Надеюсь, это поможет

0 голосов
/ 11 апреля 2019

Установите ваши кнопки Видимость на Ушли в вашем макете XML Таким образом, они не оставляют пустых мест, пока их видимость невидима

    <Button
    android:id="@+id/btn_1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" 
    android:layout_weight="1"
    android:visibility="gone"/>
0 голосов
/ 11 апреля 2019

У вас есть два варианта сделать это

1: -

View.VISIBLE  //Visible the view which is acquire its space
View.INVISIBLE //Invisible the view and it acquire the space 
View.GONE //visibility Gone of its view and also not acquire view space

2: -

выможно использовать RecyclerView и передать модель на adapter, а затем отобразить кнопки в соответствии с model.

0 голосов
/ 11 апреля 2019

разница между

View.INVISIBLE

и

View.GONE 

заключается в том, что View.GONE не занимает места, и вы должны использовать view.GONE

0 голосов
/ 11 апреля 2019

есть три варианта видимости элементов,

View.VISIBLE
View.INVISIBLE 
View.GONE

используйте View.GONE для элементов, которые вы не хотите показывать.

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