Как я могу получить доступ к методу из другого класса фрагмента? ⇐ Android
-
Гость
Как я могу получить доступ к методу из другого класса фрагмента?
Я хочу вызвать метод из другого фрагмента, но он продолжает сообщать мне, что значения моих TextViews равны нулю..?
Игрок1:
публичный класс PlayerTurn1 расширяет фрагмент { TextView p1Name; TextView p1Icon; Кнопка готовоP1; Кнопка сбросаP1; Строка EditText; столбец EditText; TicTacToeLayout myObject = новый TicTacToeLayout(); ArrayList player1; Дополнения к пакету = новый Bundle(); интервал поворота = 1; public void onActivityCreated (Bundle saveInstanceState) { super.onActivityCreated(savedInstanceState); экстра = getArguments(); player1 = новый ArrayList(extras.getStringArrayList("player1")); Toast.makeText(getActivity(), player1.get(0), Toast.LENGTH_LONG).show();//Имя игрока Toast.makeText(getActivity(), player1.get(1), Toast.LENGTH_LONG).show();//Иконка, выбранная игроком row = (EditText) getActivity().findViewById(R.id.rowP1); столбец = (EditText) getActivity().findViewById(R.id.columnP1); p1Name = (TextView) getActivity().findViewById(R.id.p1NameInfo); p1Icon = (TextView) getActivity().findViewById(R.id.p1IconInfo); DoneP1 = (Кнопка) getActivity().findViewById(R.id.doneP1); resetP1 = (Кнопка) getActivity().findViewById(R.id.resetP2); УстановитьPlayer(); DoneP1.setOnClickListener(новый View.OnClickListener() { общественная недействительность onClick (Просмотр v) { если (checkField() != ложь) { int rowValueInt = Integer.parseInt(row.getText().toString()); int colValueInt = Integer.parseInt(column.getText().toString()); myObject.play(rowValueInt, colValueInt, player1.get(1)); вызовPlayer2Fragment(); } } }); } Фрагмент игрока 2 — это точно такой же код, поэтому я не буду его добавлять.
Класс фрагмента TicTacToeLayout:
публичный класс TicTacToeLayout расширяет фрагмент { TextView изображение1, изображение2, изображение3, изображение4, изображение5, изображение6, изображение7, изображение8, изображение9; TextView[][] изображения; public View onCreateView (надуватель LayoutInflater, Контейнер ViewGroup, Bundle saveInstanceState) { return inflater.inflate(R.layout.tictactoe_layout, контейнер, false); } public void onActivityCreated (Bundle saveInstanceState) { super.onActivityCreated(savedInstanceState); image1 = (TextView) getActivity().findViewById(R.id.Image1); image2 = (TextView) getActivity().findViewById(R.id.Image2); image3 = (TextView) getActivity().findViewById(R.id.Image3); image4 = (TextView) getActivity().findViewById(R.id.Image4); image5 = (TextView) getActivity().findViewById(R.id.Image5); image6 = (TextView) getActivity().findViewById(R.id.Image6); image7 = (TextView) getActivity().findViewById(R.id.Image7); image8 = (TextView) getActivity().findViewById(R.id.Image8); image9 = (TextView) getActivity().findViewById(R.id.Image9); изображения = новый TextView[][]{ {image1, image2, image3}, {изображение4, изображение5, изображение6}, {изображение7, изображение8, изображение9} }; тост(); } публичный тост за пустоту() { Toast.makeText(getActivity(), images[0][0].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[0][1].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[0][2].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[1][0].getText().toString(), Toast.LENGTH_LONG).show(); } public void play (строка int, столбец int, значок строки) { изображения[строка-1][столбец-1].setText(значок); } } Я просто придумал метод, который попробовал и поджарил, просто чтобы убедиться, что в массиве что-то есть, и он сработал. Однако он что-то поджаривает только тогда, когда фрагмент создан. Каким-то образом после вызова метода myObject.play(rowValueInt, colValueInt, player1.get(1)); отладчик сообщает мне, что все значения моих изображений равны нулю.
Вот что говорит отладчик:
этот TicTacToeLayout (id=830016401072) изображение1 ноль изображение2 ноль изображение3 ноль изображение4 ноль изображение5 ноль изображение6 ноль изображение7 ноль изображение8 ноль изображение9 ноль изображения нулевые ряд 1 столбец 2 значок "О" (id=830016398920) В основном это происходит, когда я нажимаю кнопку «Готово». Предполагается, что когда игрок нажимает кнопку, во фрагменте TicTacToeLayout текстовое представление, расположенное в любой строке и столбце, которые ввел игрок, изменяется на X или O. строка, столбец и значок имеют соответствующее значение, но после вызова объекта изображения оказались нулевыми. Любые идеи? Моя тема была закрыта, потому что, очевидно, я не предоставил много информации, и администраторы разозлились, поэтому, если вам нужно что-то еще, просто скажите мне, я обновлю.
ИЗМЕНИТЬ вызов второго фрагмента игрока, расположенного в PlayerTurn1
public void callPlayer2Fragment() { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Фрагмент Player2Frag = новый PlayerTurn2(); Player2Frag.setArguments(дополнительно); ft.replace(R.id.fragment_container, Player2Frag); фут.коммит(); } при нажатии кнопки «Готово» вызывается фрагмент PlayerTurn2, которому передаются аргументы из этого класса, но этот фрагмент заменяется.
XML-макет
Я хочу вызвать метод из другого фрагмента, но он продолжает сообщать мне, что значения моих TextViews равны нулю..?
Игрок1:
публичный класс PlayerTurn1 расширяет фрагмент { TextView p1Name; TextView p1Icon; Кнопка готовоP1; Кнопка сбросаP1; Строка EditText; столбец EditText; TicTacToeLayout myObject = новый TicTacToeLayout(); ArrayList player1; Дополнения к пакету = новый Bundle(); интервал поворота = 1; public void onActivityCreated (Bundle saveInstanceState) { super.onActivityCreated(savedInstanceState); экстра = getArguments(); player1 = новый ArrayList(extras.getStringArrayList("player1")); Toast.makeText(getActivity(), player1.get(0), Toast.LENGTH_LONG).show();//Имя игрока Toast.makeText(getActivity(), player1.get(1), Toast.LENGTH_LONG).show();//Иконка, выбранная игроком row = (EditText) getActivity().findViewById(R.id.rowP1); столбец = (EditText) getActivity().findViewById(R.id.columnP1); p1Name = (TextView) getActivity().findViewById(R.id.p1NameInfo); p1Icon = (TextView) getActivity().findViewById(R.id.p1IconInfo); DoneP1 = (Кнопка) getActivity().findViewById(R.id.doneP1); resetP1 = (Кнопка) getActivity().findViewById(R.id.resetP2); УстановитьPlayer(); DoneP1.setOnClickListener(новый View.OnClickListener() { общественная недействительность onClick (Просмотр v) { если (checkField() != ложь) { int rowValueInt = Integer.parseInt(row.getText().toString()); int colValueInt = Integer.parseInt(column.getText().toString()); myObject.play(rowValueInt, colValueInt, player1.get(1)); вызовPlayer2Fragment(); } } }); } Фрагмент игрока 2 — это точно такой же код, поэтому я не буду его добавлять.
Класс фрагмента TicTacToeLayout:
публичный класс TicTacToeLayout расширяет фрагмент { TextView изображение1, изображение2, изображение3, изображение4, изображение5, изображение6, изображение7, изображение8, изображение9; TextView[][] изображения; public View onCreateView (надуватель LayoutInflater, Контейнер ViewGroup, Bundle saveInstanceState) { return inflater.inflate(R.layout.tictactoe_layout, контейнер, false); } public void onActivityCreated (Bundle saveInstanceState) { super.onActivityCreated(savedInstanceState); image1 = (TextView) getActivity().findViewById(R.id.Image1); image2 = (TextView) getActivity().findViewById(R.id.Image2); image3 = (TextView) getActivity().findViewById(R.id.Image3); image4 = (TextView) getActivity().findViewById(R.id.Image4); image5 = (TextView) getActivity().findViewById(R.id.Image5); image6 = (TextView) getActivity().findViewById(R.id.Image6); image7 = (TextView) getActivity().findViewById(R.id.Image7); image8 = (TextView) getActivity().findViewById(R.id.Image8); image9 = (TextView) getActivity().findViewById(R.id.Image9); изображения = новый TextView[][]{ {image1, image2, image3}, {изображение4, изображение5, изображение6}, {изображение7, изображение8, изображение9} }; тост(); } публичный тост за пустоту() { Toast.makeText(getActivity(), images[0][0].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[0][1].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[0][2].getText().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), images[1][0].getText().toString(), Toast.LENGTH_LONG).show(); } public void play (строка int, столбец int, значок строки) { изображения[строка-1][столбец-1].setText(значок); } } Я просто придумал метод, который попробовал и поджарил, просто чтобы убедиться, что в массиве что-то есть, и он сработал. Однако он что-то поджаривает только тогда, когда фрагмент создан. Каким-то образом после вызова метода myObject.play(rowValueInt, colValueInt, player1.get(1)); отладчик сообщает мне, что все значения моих изображений равны нулю.
Вот что говорит отладчик:
этот TicTacToeLayout (id=830016401072) изображение1 ноль изображение2 ноль изображение3 ноль изображение4 ноль изображение5 ноль изображение6 ноль изображение7 ноль изображение8 ноль изображение9 ноль изображения нулевые ряд 1 столбец 2 значок "О" (id=830016398920) В основном это происходит, когда я нажимаю кнопку «Готово». Предполагается, что когда игрок нажимает кнопку, во фрагменте TicTacToeLayout текстовое представление, расположенное в любой строке и столбце, которые ввел игрок, изменяется на X или O. строка, столбец и значок имеют соответствующее значение, но после вызова объекта изображения оказались нулевыми. Любые идеи? Моя тема была закрыта, потому что, очевидно, я не предоставил много информации, и администраторы разозлились, поэтому, если вам нужно что-то еще, просто скажите мне, я обновлю.
ИЗМЕНИТЬ вызов второго фрагмента игрока, расположенного в PlayerTurn1
public void callPlayer2Fragment() { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Фрагмент Player2Frag = новый PlayerTurn2(); Player2Frag.setArguments(дополнительно); ft.replace(R.id.fragment_container, Player2Frag); фут.коммит(); } при нажатии кнопки «Готово» вызывается фрагмент PlayerTurn2, которому передаются аргументы из этого класса, но этот фрагмент заменяется.
XML-макет
Мобильная версия