2013-10-06 3 views
0

Я пытаюсь написать фрагмент, который имеет способ установить что-то в TextView. Поэтому у меня есть следующий фрагмент:Как использовать метод внутри фрагмента?

public class DetailFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_fragment, container, false); 
// setText("set it to something"); 
    return view; 
    } 

    public void setText(String item) { 
    TextView view = (TextView) getView().findViewById(R.id.detailsText); 
    view.setText(item); 
    } 
} 

Это прекрасно работает. Он отображает текст. Теперь я хочу изменить текст в текстовом виде программно. Я думал, что сначала начну с редактирования его изнутри фрагмента. Поэтому у меня есть метод, который должен быть способен это сделать. Когда я сейчас раскомментирую setText("set it to something");, он дает мне InflateException: Error inflating class fragment., и я не знаю, почему.

Кто-нибудь знает, как я могу это решить?

+1

вызова метода в onResume – waqaslam

+0

@Waqas - Спасибо за это. Действительно работает как шарм! Другие люди также предлагают другие способы сделать это в onCreateView. Какой из них был бы лучшим/правильным способом сделать это; в onCreateView или в onResume? – kramer65

+0

Выполнение этого в 'onResume()' приведет к тому, что этот метод будет вызываться каждый раз, когда фрагмент приостанавливается и возобновляется, что плохо, потому что иногда фрагмент просто приостанавливается и возобновляется (когда отображается диалог), в этом случае это не очень хорошая идея чтобы снова установить текст без какой-либо причины. Я предлагаю вам переместить этот вызов на 'onViewCreated()' или 'onActivityCreated()'. –

ответ

1

ли это так

class ... extends Fragment{ 
    private TextView _myTextView; 

    onCreateView(...){ 
     //inflate view 

     _myTextView = (TextView)view.findViewById(R.id.text_view); 
     editText("blablabla"); 
    } 


    private void editText(String text){ 
     _myTextView.setText(text); 
    } 
} 

певец должно инициализировать все элементы пользовательского интерфейса в вашем onCreateView, чтобы вы раздуть с точки зрения вы раздуванием!

1

Если вы хотите сделать это в onCreateView() затем сделать это следующим образом:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_fragment, container, false); 
    TextView tv= (TextView) view.findViewById(R.id.detailsText); 
    tv.setText("set it to something"); 
    return view; 

}

Причина заключается в том, что getView() не может быть вызван до onCreateView() возвращается.

или сделать это из onViewCreated():

public void onViewCreated (View view, Bundle savedInstanceState){ 
    TextView tv = (TextView) view.findViewById(R.id.detailsText); 
    tv.setText("set it to something"); 
    // following will work too here 
    // setText("set it to something"); 
} 
+0

Хорошо, спасибо! Вакас также сделал предложение сделать это в onResume. Каким был бы лучший/правильный способ сделать это, изнутри onCreateView, как вы предлагаете, или внутри метода onResume? – kramer65

+0

Еще один вопрос; причина, по которой я хочу иметь выделенный метод для изменения этого текста, заключается в том, что я действительно хочу иметь возможность вызывать его изнутри Activity. Знаете ли вы, как это сделать? – kramer65

+0

Затем вы должны вызвать его из 'onViewCreated()' или может быть из 'onActivityCreated()'. Выполнение этого в 'onResume()' приведет к тому, что этот метод будет вызываться каждый раз, когда фрагмент приостанавливается и возобновляется, что плохо, потому что иногда фрагмент просто приостанавливается и возобновляется (когда отображается диалог) в этом случае не рекомендуется снова установите текст без какой-либо причины. –

Смежные вопросы