Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
#1

Программное создание GridLayout и добавление в него объектов - Программирование Android

05.04.2014, 12:26. Просмотров 4024. Ответов 7
Метки нет (Все метки)

Дисклеймер:
Всем доброго дня! Я - новичок в написании программ под Android. Имеется небольшой опыт С++/С#, но речь не об этом.

Я начал изучение базовых элементов интерфейса - View и layout'ов. Поставил перед собой следующую задачу (на решении которой собственно и застопорился).

1) Программно создать GridLayout указанных размеров (пусть 10х10)
2) Заполнить ячейки в шахматном порядке (например элементами RadioButton) Пример прикрепил снизу.

Для начала решил создать поле 10х10 в методе onCreate, там же задать размер, после чего заполнять его спамя кнопку.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridLayout FieldLayout = new GridLayout(this);
        FieldLayout.setColumnCount(10);
        FieldLayout.setRowCount(10);
        
    }
 
    // Заполняем
    public void Create(View v) {    
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
    }
 
}
Ругается на строку 16 - FieldLayout cannot be resolved.
Насколько я понял, за пределами метода onCreate мы нашего поля не видим.
Вопрос - как в этом случае правильно создать GridLayout?

Спасибо за ваши ответы! Всем добра!
Миниатюры
Программное создание GridLayout и добавление в него объектов  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
05.04.2014, 12:56     Программное создание GridLayout и добавление в него объектов #2
Цитата Сообщение от Pesso711 Посмотреть сообщение
Насколько я понял, за пределами метода onCreate мы нашего поля не видим.
Именно так.
Цитата Сообщение от Pesso711 Посмотреть сообщение
Вопрос - как в этом случае правильно создать GridLayout?
Сделать эту переменную членом класса

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends Activity {
    GridLayout FieldLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        FieldLayout = new GridLayout(this);
        FieldLayout.setColumnCount(10);
        FieldLayout.setRowCount(10);
        
    }
 
    // Заполняем
    public void Create(View v) {    
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
    }
 
}
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 14:56  [ТС]     Программное создание GridLayout и добавление в него объектов #3
Да, действительно. Сам не догадался =(

Теперь проблема в следующем - созданные кнопки никак не отображаются на экране.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.example.field;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    GridLayout FieldLayout; 
    //LinearLayout Test; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        FieldLayout = new GridLayout(this);
        //Test = (LinearLayout) findViewById(R.id.Test);
        FieldLayout.setColumnCount(5);
        FieldLayout.setRowCount(5);
        
    }
 
    
    // Заполняем в шахматном порядке.
    public void Create(View v) {    
        
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
    }
 
}
Думаю, дело в том, что layout-то я создал, но на экран его не добавил. Все, что нашел по теме, это setContentView, но так мы зададим корневой элемент экрана, а у меня корневым элементом является LinearLayout, созданный руками в xml - файле.

Вопрос - как же вывести созданный программно GridLayout на экран, оставив LinearLayout корневым элементом?

Спасибо за ваши ответы =)
dan41k
]:->
97 / 91 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 15:10     Программное создание GridLayout и добавление в него объектов #4
Задай LinearLayout'у Id, получи на него ссылку

Java
1
LinearLayout ll = (LinearLayout) findViewById(**id layout'a**);
и добавляй в него элементы

Java
1
ll.addView(view, index);
Добавлено через 20 секунд
в твоем случае - положи в него GridLayout
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 15:22  [ТС]     Программное создание GridLayout и добавление в него объектов #5
Спасибо, заработало! Теперь такая проблема - Когда спамлю кнопку, выполня этот метод:

Java
1
2
3
4
5
6
 public void Create(View v) {    
        
        RadioButton btnNew = new RadioButton(this);
        FieldLayout.addView(btnNew);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
    }
...то происходит заполнение GridView. При создании мы задали ему размер 5х5. Но на выходе мы имеем вот это: (см. миниатюру)


Почему gridView продолжает заполняться, когда мы жмем на кнопку?
Миниатюры
Программное создание GridLayout и добавление в него объектов  
dan41k
]:->
97 / 91 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 15:33     Программное создание GridLayout и добавление в него объектов #6
ну а вам какой нужен был эффект?
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
07.04.2014, 15:43  [ТС]     Программное создание GridLayout и добавление в него объектов #7
Я хотел заполнить поле 5 на 5. Дальнейшее заполнение стало несколько неожиданным. Подозреваю, что что-то где-то не указал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 12:19     Программное создание GridLayout и добавление в него объектов
Еще ссылки по теме:
Android Программное добавление View элементов в Fragment
Android Программное создание layout
Android Программное создание TextView
Программное создание экрана Android
Программное создание интерфейса Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pesso711
0 / 0 / 0
Регистрация: 05.04.2014
Сообщений: 7
09.04.2014, 12:19  [ТС]     Программное создание GridLayout и добавление в него объектов #8
Бог с ним, с переполнением. В ходе реализации возник следующий вопрос - как добавить кнопку в конкретную ячейку в Gridlayout'е? Как правильно добавить соответствующие атрибуты в
Java
1
FieldLayout.addView(btnNew);
?

Добавлено через 12 часов 56 минут
Разобрался. Попробовал заполнить по диагонали - получилось.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Заполняем по диагонали.
    public void Create(View v) {    
        //Кнопка будет создана в этой строке...
        Spec row = GridLayout.spec(rowIndex, 1); 
        //... и в этой колонке
        Spec column = GridLayout.spec(columnIndex, 1);
        // Создадим параметр, в который передадим 2 строчки выше.
        GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, column);
        //Создали кнопку
        RadioButton btnNew = new RadioButton(this);
        //добавили кнопку в GridLayout, применив к ней параметры gridLayoutParam (кнопка появится в ячейке row;column)
        FieldLayout.addView(btnNew,gridLayoutParam);
        Toast.makeText(this, "Создана кнопка", Toast.LENGTH_SHORT).show();
        rowIndex++; columnIndex++;
    }
Yandex
Объявления
09.04.2014, 12:19     Программное создание GridLayout и добавление в него объектов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru