2013-08-17 2 views
1

Я создал пользовательский вид. Теперь я хочу создать класс, в котором есть пользовательский вид как компоненты (возможно, массив Custom View). Например, что-то вроде Button b = new Button (this), как я могу применить его для своего пользовательского представления?Как создать новый объект пользовательского вида

Поскольку конструктор пользовательского представления является CustomView (контекст контекста, AttributeSets attrs), а в новом классе, который я создал, у меня нет контекста или attrs?

Спасибо!

+0

возможно дубликат [Android сохранить программно созданных просмотров] (http://stackoverflow.com/questions/14033619/android-save-programmatically-created-views) – FredTheWebGuy

ответ

1

Добавить этот конструктор для пользовательского класса представления:

public CustomView(Context context) { 
    mContext = context 
} 

Это, как вы бы использовать пользовательский вид:

Если вам нужен пользовательский вид, единственный вид:

CustomView cv = new CustomView(this); 
setContentView(cv); 

Если вы хотите добавить настраиваемое представление к родительскому мнению:

// inflate mainXML 
View mainView = getLayoutInflater().inflate(R.layout.mainXML, null); 

// find container 
LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container); 

// initialize your custom view 
CustomView view = new CustomView(this); 

// add your custom view to container 
container.addView(view); 

setContentView(mainView); 

Кстати, это должно работать также:

CustomView cv = new CustomView(this, null); 

Edit 1:

Использование вложенных для петель:

LinearLayout childLL; 
CustomView cv 

for (int i = 0; i < 8; i++) { 
    childLL = new LinearLayout(this); 
    for (int j = 0; j < 8; j++) { 
     cv = new CustomView(this); 
     // set LayoutParams 
     childLL.addView(cv); 
    } 
    container.addView(childLL); 
} 

setContentView(container); 
+0

Спасибо за быстрый ответ! Но моя проблема в том, что я пытаюсь создать новый View, который содержит 10 или 20 этого пользовательского вида. Вы можете представить себе как шахматную доску, каждый квадрат - CustomView, а вся шахматная доска (64 квадрата) - это новый вид, который я пытаюсь создать в своей ситуации. И тогда эта шахматная доска - это то, что я добавлю в mainView, а не отдельный CustomView. Для этого мне нужно создать некоторый объект CustomView (массив CustomView) на моей шахматной доске, верно? –

+0

@piavgh Исправить. Создайте XML-файл макета и поместите в него 'LinearLayout'. Если вы хотите использовать приведенный выше код, дайте 'LinearLayout'' id = container' и 'orientation = vertical'. Чтобы создать нужное представление, используйте 'inested for-loop'. Во внешнем цикле вы создадите LinearLayout с горизонтальной ориентацией. Во внутреннем цикле вы создадите экземпляр CustomView и добавьте его в LinearLayout. – Vikram

+0

@piavgh См. ** Редактировать 1 ** выше. – Vikram

Смежные вопросы