Приложение Xamarin.Android с использованием фрагмента, как связать обработчик с виджетом внутри фрагмента - PullRequest
0 голосов
/ 13 февраля 2019

Мое приложение использует нижнюю навигацию, как 3 вкладки.Фрагменты создаются при запуске supportFragmentManager.Первый фрагмент (вкладка) показывается пользователю.Я хочу подключить обработчик кнопки к кнопке на третьем фрагменте (3-я вкладка).

Приложение выполняет только одно действие.Из этого действия в методе OnCreate и после создания 3-х фрагментов я вызываю

myButton= FindViewById<Button>(Resource.Id.theButton);

Код запускается, но поскольку myButton всегда равен null, я не могу подключить к нему обработчик!Например, если пользовательский интерфейс еще не готов к этому фрагменту, поскольку он показывает первый в данный момент.

Есть ли другое событие, где я могу подключить обработчик?Я не могу добавить форму обработчика в коде фрагмента.Всегда получи ноль!

1 Ответ

0 голосов
/ 16 февраля 2019

Поскольку я начал с нуля тестовый проект, чтобы попытаться точно определить проблему, я не слишком злоупотреблял копированием, чтобы найти новое решение.И, как ни странно, это тестовое решение работает.Удивлен?Не совсем догадываюсь!

Но для того, чтобы объяснить всем, кто мог испытывать те же проблемы, я экспериментировал, вот каковы были симптомы и как я их исправил.

Когда я использовал видв методе OnCreateView фрагмента, подобном следующему:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var ignored = base.OnCreateView(inflater, container, savedInstanceState);

        var view = inflater.Inflate(Resource.Layout.fragment_options, null);

        myButton = (Button)view.FindViewById(Resource.Id.Button1);
        myButton.SetOnClickListener(this);
        return view;
    }

view.FindViewById всегда возвращал Null, даже если в intellisense "Resource.Id.Button1" был там и автозаполнялся!

Оказывается, что Button1 был определен следующим образом в файле макета фрагмента

<Button id="@+id/Button1" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:text ="Test"
/>

, а не как

<Button android:id="@+id/Button1" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:text ="Test"
/>

, как должно было быть.Правильно названный атрибут «id»!

Конечным результатом было то, что «Button1» действительно был в файле ресурсов и, следовательно, «intellicompleted», но не должным образом в пространстве имен!И да, были предупреждения компилятора о том, что мне следовало присмотреться.Предупреждения действительно ориентировали меня на проблему.

Итак, проблема была за клавиатурой!Надеюсь, что это объяснение поможет кому-нибудь столь же глупому, как я!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...