Я новичок в Xamarin, раньше работал с Android, и теперь я пытаюсь создать класс доски, но не могу динамически создавать кнопки.
Я пытаюсь создать кнопки, и по какой-то причине прямо сейчас я сталкиваюсь с этой проблемой, пытаясь динамически создавать кнопки... надеюсь, вы могли бы мне помочь :)
в деятельность:
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>





в деятельность:
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: запускаю, работает, но кнопки перекрываются и могут быть проблемы с вычислением положения кнопок в вашем коде.
Большое спасибо, сэр! хорошего дня
Конечно! У меня только что возникла другая проблема.. когда я запускаю ее, она сообщает мне, когда: layout.AddView(button[i,j]); что кнопка не является экземпляром, но я объявил новую кнопку несколько строк назад
@EyalAbramovitch, в чем проблема, есть сообщение об ошибке? Я не совсем понимаю, что вы описываете, и layout.AddView(buttons[i,j]); орфографические ошибки
когда я запускаю приложение, оно не показывает кнопки и переводит меня на строку, где я добавляю представление в макет (layout.AddView(buttons[i,j])), сообщая мне, что объект не определен и не является экземпляром, хотя моя программа (теоретически) должна делать что для каждой кнопки я делаю
не могли бы вы обновить свой код выше и дать мне взглянуть
вы пропустили «this.context = context» в методе построения
Я обновил код здесь. Он точно такой же, как у меня, но мой не работает :/
вы перемещаете Board board = new Board(this); ниже SetContentView(Resource.Layout.activity_button);Инициализациядолжна идти после SetContentView
это работает сейчас?