2013-03-04 2 views
0

Я разработал шахматную доску, используя 64 кнопки в Android. Но после его проектирования у меня много проблем, потому что мне нужно реализовать 64 OnClickListeners. Есть ли другой способ реализовать OnClickListener, используя цикл for, или неправильно разрабатывать шахматную доску с помощью кнопок?Проектирование шахмат Пользовательский интерфейс в android

+1

Просто потому, что 99% примеров используют анонимный подкласс 'OnClickListener', это не значит, что вам нужно. Подклассируем его классом, который хранит x, y в полях и конструктор с x, y в качестве параметров. – martijno

ответ

1

Да, можно перебирать кнопки и добавлять слушателей к каждому. Внутри ваш цикл, вы могли бы сделать что-то вроде:

button.setOnClickListener(new View.OnClickListener() {  
    @Override 
    public void onClick(View v) { 
     // Handle click events... 
    } 
}); 
+0

, но каждая кнопка имеет другое имя (например, a1, a2..a8, b1, b2 ... b8), Как это можно использовать для цикла в виде кнопки id –

+0

У этого сообщения есть некоторая хорошая информация о том, как это сделать: http://stackoverflow.com/questions/4809834/how-to-iterate-through-a-views-elements – elevine

+0

Я создал TableLayout с 8 таблицами, каждый таблеток, содержащий 8 кнопок в LinearLayout.so ответ, указанный в этом сообщении, будет проверить все эти детские (включая кнопки) или нет? –

3

Вы должны взглянуть на developer samples, особенно Tic Tac приложения носка, который использует настраиваемое представление для сетки на основе игрового поля. Вы должны уметь расширять эту идею.

Если вы хотите продолжить использование кнопок для каждого квадрата, вам нужно будет узнать идентификаторы для них, чтобы создать onClickListener. Существует два способа решить эту проблему.
Либо добавить onClickListener в макете XML:

<Button 
parameters... 
onClick="myOnClick" 
</ 

В вашей Activity то вы можете создать метод myOnClick:

public void myOnClick(View clickedView){ 
    //code 
} 

А, возможно, лучший способ для кнопки-решение было бы создать их от кода, либо получите свой LayoutInflater, либо создайте свои xml-кнопки и добавьте в свой текущий контент, либо создайте новые кнопки, используя соответствующий класс java: Button myButton e3 = new Button(context);

3

Если вы действительно хотите иметь 64 отдельных вида, вам не нужно 64 отдельных onClickListeners; просто дайте представления атрибуту onClick в XML, все к тому же методу связанной деятельности. Затем вы можете создать таблицу во время сборки, чтобы сопоставить идентификаторы с координатами или добавить координаты для каждого представления с помощью собственных атрибутов.

Однако было бы разумнее иметь один вид для вашей шахматной доски. Это представление разбилось бы на 64 квадрата, сохранив внутреннюю таблицу, указывающую, какие фигуры есть где, нарисуйте квадраты и части в своем .onDraw() и произнесите некоторую математику при нажатии, чтобы определить, на какой квадрат был нажат. Исследование TileView.java в приложении sample Snake; как только вы поймете этот код, вы сможете легко провести время со своим классом ChessboardView.

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