Динамическое создание кнопки в Xamarin

Я новичок в Xamarin, раньше работал с Android, и теперь я пытаюсь создать класс доски, но не могу динамически создавать кнопки.

Я пытаюсь создать кнопки, и по какой-то причине прямо сейчас я сталкиваюсь с этой проблемой, пытаясь динамически создавать кнопки... надеюсь, вы могли бы мне помочь :)

Динамическое создание кнопки в Xamarin

в деятельность:

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using Android.Content;
using Android.Views;

namespace App2
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource

            Board board = new Board(this);
            SetContentView(Resource.Layout.activity_main);

        }
    }
    class Board
    {
        RelativeLayout layout;
        Context context;
        const int length = 8;
        Button[,] buttons;


        public Board(Context context)
        {
            layout = (context as MainActivity).FindViewById<RelativeLayout>(Resource.Id.root_layout);
            this.context = context;
            Init();
        }
        private void Init()
        {
            //Initializing the board
            buttons = new Button[length, length];
            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    buttons[i, j] = new Button(context);
                    buttons[i, j].Text = (i + j).ToString();
                    buttons[i, j].SetX(50 * i);
                    buttons[i, j].SetY(20 * j);
                    layout.AddView(buttons[i, j]);

                }
            }

        }
    }

}

в ахмл :

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:id = "@+id/root_layout"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:theme = "@android:style/Theme.NoTitleBar">
</RelativeLayout>

это работает сейчас?

Leo Zhu - MSFT 22.03.2019 10:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
150
1

Ответы 1

My current problem

в деятельность:

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using Android.Content;
using Android.Views;

namespace App2
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource

            Board board = new Board(this);
            SetContentView(Resource.Layout.activity_main);

        }
    }
    class Board
    {
        RelativeLayout layout;
        Context context;
        const int length = 8;
        Button[,] buttons;


        public Board(Context context)
        {
            layout = (context as MainActivity).FindViewById<RelativeLayout>(Resource.Id.root_layout);
            this.context = context;
            Init();
        }
        private void Init()
        {
            //Initializing the board
            buttons = new Button[length, length];
            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    buttons[i, j] = new Button(context);
                    buttons[i, j].Text = (i + j).ToString();
                    buttons[i, j].SetX(50 * i);
                    buttons[i, j].SetY(20 * j);
                    layout.AddView(buttons[i, j]);

                }
            }

        }
    }

}

в ахмл :

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:id = "@+id/root_layout"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:theme = "@android:style/Theme.NoTitleBar">
</RelativeLayout>

PS: запускаю, работает, но кнопки перекрываются и могут быть проблемы с вычислением положения кнопок в вашем коде.

Большое спасибо, сэр! хорошего дня

Eyal Abramovitch 08.03.2019 07:43

Конечно! У меня только что возникла другая проблема.. когда я запускаю ее, она сообщает мне, когда: layout.AddView(button[i,j]); что кнопка не является экземпляром, но я объявил новую кнопку несколько строк назад

Eyal Abramovitch 08.03.2019 07:53

@EyalAbramovitch, в чем проблема, есть сообщение об ошибке? Я не совсем понимаю, что вы описываете, и layout.AddView(buttons[i,j]); орфографические ошибки

Leo Zhu - MSFT 08.03.2019 08:43

когда я запускаю приложение, оно не показывает кнопки и переводит меня на строку, где я добавляю представление в макет (layout.AddView(buttons[i,j])), сообщая мне, что объект не определен и не является экземпляром, хотя моя программа (теоретически) должна делать что для каждой кнопки я делаю

Eyal Abramovitch 08.03.2019 13:14

не могли бы вы обновить свой код выше и дать мне взглянуть

Leo Zhu - MSFT 08.03.2019 13:16

вы пропустили «this.context = context» в методе построения

Leo Zhu - MSFT 08.03.2019 13:27

Я обновил код здесь. Он точно такой же, как у меня, но мой не работает :/

Eyal Abramovitch 08.03.2019 13:29

вы перемещаете Board board = new Board(this); ниже SetContentView(Resource.Layout.activity_button);Инициализация‌​должна идти после SetContentView

Leo Zhu - MSFT 08.03.2019 14:16

Другие вопросы по теме