Android: Как обновить мой TextView в фрагменте

Я пытаюсь использовать фрагменты для создания своего первого подходящего приложения для Android. У меня есть основной xml. Который состоит из двух вертикальных фрагментов, верхние фрагменты состоят всего из двух TextView. Первый из них содержит статический текст, а второй содержит значение, которое я в конечном итоге получаю динамически из SQL.

Если я поставлю это, то это моя MainActivity.java, тогда он с радостью обновляет значение TextView в моем первом фрагменте:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Set the Text to try this out TextView t = (TextView)findViewById(R.id.viewItem); t.setText("Text to Display"); } 

У меня есть два фрагмента XML и java для поддержки каждого, поэтому я хочу поместить параметр этого поля в Java, который поддерживает фрагмент, а не java, который предназначен для MainActivity.

Когда я помещаю его в фрагмент, он выглядит так:

  public class FragmentMainTop extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ // -- inflate the layout for this fragment return inflater.inflate(R.layout.fragmentmt, container,false); // Set the Text to try this out TextView t = (TextView)findViewById(R.id.viewItem); t.setText("Text to Display"); } 

Но если я это сделаю, я получаю сообщение об ошибке в строке TextView:

«Метод findViewById (int) не определен для типа FragmentMainTop"

Так почему он не знает этот метод? У меня есть ctl / shift / o, поэтому я знаю, что у меня есть все необходимые импорты. Я не хочу вставлять весь свой код в MainActivity, потому что, если я захочу использовать фрагмент в другом действии, мне придется повторить весь код.

Solutions Collecting From Web of "Android: Как обновить мой TextView в фрагменте"

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

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ // -- inflate the layout for this fragment View myInflatedView = inflater.inflate(R.layout.fragmentmt, container,false); // Set the Text to try this out TextView t = (TextView) myInflatedView.findViewById(R.id.viewItem); t.setText("Text to Display"); return myInflatedView; } 

Обычно, когда вы вызываете findViewById() внутри Activity , вы вызываете Activity.findViewById() . Пробуждение одного и того же вызова в классе Fragment завершится неудачно, потому что такого метода Fragment.findViewById() . Таким образом, вы должны использовать View.findViewById() с вашим раздутым представлением, чтобы получить ссылки на ваши виджеты.

Я не эксперт, но я бы сказал, что оператор return в методе возвращает что-то, а следующие строки после этого утверждения недостижимы: O

Поэтому попробуйте изменить порядок! 🙂

Я использую этот код из своей активности, чтобы обновить текстовое представление, добавленное в тег xml. Текстовые объекты представляют собой объекты уровня класса. Вот какой код:

 <fragment android:id="@+id/fragmentRegister" android:name="com.proshore.loveis.RegisterFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/view1" /> 

Heres код фрагмента, просто отображающий переменную уровня класса.

 public class RegisterFragment extends Fragment implements OnClickListener { TextView textViewDOB, textViewLanguage; public RegisterFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //eluded methods here } } 

Теперь активность, с которой я обновляю свой фрагмент:

 public class RegisterActivity extends FragmentActivity { Button buttonEnter; RegisterFragment fragmentRegister; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); buttonEnter = (Button) findViewById(R.id.buttonEnter); fragmentRegister = (RegisterFragment) getSupportFragmentManager() .findFragmentById(R.id.fragmentRegister); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); buttonEnter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.d("dontknowitwillowrk", fragmentRegister.textViewLanguage .getText().toString()); fragmentRegister.textViewLanguage.setText("hello mister how do you do"); } }); } } 

Примечание: не уверен, что это хороший способ.