Вопрос:
Я создаю новый интерфейс 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); }
}”