Как определить на какую кнопку нажал пользователь

287
10 ноября 2017, 07:00

Итак, есть 5 кнопок на экране, нужно определить на какую кнопку нажал пользователь и взять её тег после чего редирект на другое активити. Пытался сделать это так:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetTheme(Android.Resource.Style.ThemeDeviceDefaultLightNoActionBar);
    SetContentView(Resource.Layout.MainScreen);
    Button BtnHm = (Button)FindViewById(Resource.Id.Home);
    BtnHm.Click += SwitchActivity;
    Button BtnSrch = (Button)FindViewById(Resource.Id.Search);
    BtnSrch.Click += SwitchActivity;
    Button BtnLstOfPh = (Button)FindViewById(Resource.Id.ListOfPhotos);
    BtnLstOfPh.Click += SwitchActivity;
    Button BtnGlr = (Button)FindViewById(Resource.Id.Glory);
    BtnGlr.Click += SwitchActivity;
    Button BtnMyAcc = (Button)FindViewById(Resource.Id.MyAcc);
    BtnMyAcc.Click += SwitchActivity;
}
public void SwitchActivity(object sender, EventArgs e)
{
    Button sendBtn = (Button)sender;
    switch (sendBtn.Tag)
    {
        case 1:
            Intent toMain = new Intent(this, typeof(MainScreenActivity));
            StartActivity(toMain);
            break;
        case 2:
            Intent toSearch = new Intent(this, typeof(SearchActivity));
            StartActivity(toSearch);
            break;
        case 3:
            Intent toPhoto = new Intent(this, typeof(ListOfPhotoActivity));
            StartActivity(toPhoto);
            break;
        case 4:
            Intent toGlory = new Intent(this, typeof(GloryActivity));
            StartActivity(toGlory);
            break;
        case 5:
            Intent toUser = new Intent(this, typeof(UserActivity));
            StartActivity(toUser);
            break;
    }
}

Но мне подчеркивает в case цифры и пишет что требуется постоянное значение. Как исправить?

Answer 1

Чтобы вы ни писали в xml, в свойство Tag любое значение будет паковаться (Tag - всё же object). При запросе свойства вы будете всегда получать object, поэтому нужно провести распаковку:

switch ((int) sendBtn.Tag)
Answer 2

Тебе нужно присвоить каждой кнопке Id и в конструкции switch() искать view-элемент по id пример:

     switch(sendBtn.getId()){
case R.id.btn1:
...
case R.id.btn2:
...}

Если это не подходит для Вашего языка программирования, я надеюсь, что мой ответ подскажет вам путь решения данной проблемы. Всего хорошего)

Answer 3

А зачем все эти кэйсы? Можно же создать для каждой кнопки отдельный ивент. Вот так:

protected override void OnCreate(Bundle savedInstanceState)
{
  base.OnCreate(savedInstanceState);
  SetTheme(Android.Resource.Style.ThemeDeviceDefaultLightNoActionBar);
  SetContentView(Resource.Layout.MainScreen);
  Button BtnHm = (Button)FindViewById(Resource.Id.Home);
  BtnHm.Click += SwitchActivityByHm;
  Button BtnSrch = (Button)FindViewById(Resource.Id.Search);
  BtnSrch.Click += SwitchActivityBySrch;
  Button BtnLstOfPh = (Button)FindViewById(Resource.Id.ListOfPhotos);
  BtnLstOfPh.Click += SwitchActivityByLstOfPh;
  Button BtnGlr = (Button)FindViewById(Resource.Id.Glory);
  BtnGlr.Click += SwitchActivityByGlr;
  Button BtnMyAcc = (Button)FindViewById(Resource.Id.MyAcc);
  BtnMyAcc.Click += SwitchActivityByMyAcc;
}
public void SwitchActivityByHm(object sender, EventArgs e)
{
  Intent toMain = new Intent(this, typeof(MainScreenActivity));
  StartActivity(toMain);
}
public void SwitchActivityBySrch(object sender, EventArgs e)
{
  Intent toSearch = new Intent(this, typeof(SearchActivity));
  StartActivity(toSearch);
}
public void SwitchActivityByLstOfPh(object sender, EventArgs e)
{
  Intent toPhoto = new Intent(this, typeof(ListOfPhotoActivity));
  StartActivity(toPhoto);
}
public void SwitchActivityByGlr(object sender, EventArgs e)
{
  Intent toGlory = new Intent(this, typeof(GloryActivity));
  StartActivity(toGlory);
}
public void SwitchActivityByMyAcc(object sender, EventArgs e)
{
  Intent toUser = new Intent(this, typeof(UserActivity));
  StartActivity(toUser);
}
READ ALSO
TextBlock с подсветкой текста

TextBlock с подсветкой текста

Столкнулся с необходимостью выделения фрагмента текста в TextBlock, а именно определённых ключевых слов по которым были отфильтрованы элементы...

211
CancellationToken: почему структура?

CancellationToken: почему структура?

Почему CancellationToken реализован как структура? Ведь структура является типом значения, как тогда реализован данный механизм?

246
WPF/MVVM объединить модели во ViewModel

WPF/MVVM объединить модели во ViewModel

Буду излагать суть проблемы максимально краткоИмеется 2 модели:

223
C#, MySql Connection must be valid and open

C#, MySql Connection must be valid and open

Вот дебильный быть может вопрос

199