Использование findViewById внутри фрагмента

Вопрос: Я создаю новый интерфейс Tab, и для каждой вкладки у меня есть такие функции, как: public class ClassViewFragment extends Fragment { ListView classListView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.class_view, container, false); classListView = (ListView) findViewById(R.id.classList); return rootView; } } Но я получаю cannot resolve

Вопрос:

Я создаю новый интерфейс Tab, и для каждой вкладки у меня есть такие функции, как:

public class ClassViewFragment extends Fragment { ListView classListView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.class_view, container, false); classListView = (ListView) findViewById(R.id.classList); return rootView; } }

Но я получаю cannot resolve method findViewById также в другом месте. Я также не runOnUiThread использовать runOnUiThread и получить Error:(88, 29) error: cannot find symbol method runOnUiThread(<anonymous Runnable>)

Я понимаю, что это будет нормально работать, если мой класс был расширен из Activity но его фрагмент вкладки, и как я могу использовать это funcitons?

Лучший ответ:

тебе нужно

classListView = (ListView) rootView.findViewById(R.id.classList);

так как это мнение, которое вы рассматриваете

Чтобы получить runOnUiThred, вам нужно выполнить getActivity().runOnUiThread

Ответ №1

Вам нужно ссылаться на findViewById, используя представление,

public class ClassViewFragment extends Fragment { ListView classListView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.class_view, container, false); classListView = (ListView) rootView .findViewById(R.id.classList); return rootView; } }

Для runOnUiThread – это возможный дубликат изменения вида Android из другого потока

используйте его как,

activity.runOnUiThread(new Runnable()); Ответ №2

Вот объяснение берега метода findViewById;

Метод findViewById() будет работать со связанным объектом, к которому привязан ваш основной макет. Например, в действии, когда вы делаете

setContentView(activity_main);

Вы означает, что ваша Activity будет получать свои макеты из activity_main. Поэтому, когда вы делаете findViewById() в this.findViewById(), это на самом деле означает this.findViewById(), где this ваша Activity.

Поэтому в вашем случае макет class_view привязан к rootView. Но когда вы просто пишете findViewById, это означает, что this.findViewById. И this область, в которой вы находитесь, это Fragment в вашем случае. Однако я не думаю, что у Фрагмента есть такая возможность. Поэтому вы должны обратиться к rootView чтобы получить ваши представления.

rootView.findViewById() Ответ №3

Фрагменты не имеют метода findViewById(), такого как Activity, поэтому вам нужно вызвать метод корневого представления фрагмента. Попробуйте сделать rootView.findViewById(R.id.classList).

Ответ №4 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_content_mediaplayer, container, false); mSeekbar = (SeekBar) v.findViewById(R.id.seekBarMusic); return v; Ответ №5

Используйте rootView.findViewById(R.id.classList) вместо findViewById(R.id.classList).

Попробуй это:

public class ClassViewFragment extends Fragment { ListView classListView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.class_view, container, false); classListView = (ListView) rootView.findViewById(R.id.classList); return rootView; } } Ответ №6

findViewById должен запускаться внутри метода onViewCreated()

ListView classListView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.class_view, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); classListView = (ListView) view.findViewById(R.id.classList); }

}”

Оцените статью
Добавить комментарий