Изменить TextView внутри фрагмента
Я следовал руководству этого парня о том, как сделать ActionBar. Допустим, я хочу изменить TextView внутри одного из фрагментов. Поэтому я добавил это в свой StartActivity.java, в разделе onCreate:
TextView textview = (TextView) findViewById(R.id.textView1);
textview.setText("HI!");
Когда я запускаю свое приложение, оно падает. Может ли кто-нибудь указать мне правильное направление?
Я надеюсь, что кто-то найдет время, чтобы взглянуть на учебник этого парня, потому что его макет в основном такой же, как у меня. Спасибо.
3 ответа
Если вы хотите изменить свой компонент, я предлагаю вам создать метод внутри фрагмента следующим образом:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class DetailFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.details, container, false);
return view;
}
public void setText(String text){
TextView textView = (TextView) getView().findViewById(R.id.detailsText);
textView.setText(text);
}
}
Не могли бы вы попробовать заменить getView() на getActivity()?
public void setText(String text){
TextView textView = (TextView) getActivity().findViewById(R.id.detailsText);
textView.setText(text);
}
Я нашел ответ здесь, и на переполнение стека
Он использует инфлятор: (для меня это сработало)
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View inf = inflater.inflate(R.layout.fragment_place, container, false);
TextView tv = (TextView) inf.findViewById(R.id.textview);
tv.setText("New text");
return inf;
}
}
В своей основной деятельности создайте экземпляр класса фрагмента следующим образом
public class MainActivity extends AppCompatActivity {
private YourFragmentClass your_fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
your_fragment = new YourFragmentClass("pass the string value here")
}
}
в вашем классе фрагмента вы можете затем получить строку и установить с ней setText следующим образом
public class YourFragmentclass extends Fragment {
private String your_text;
public YourFragmentClass(String your_text) {
this.your_text = your_text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = (View)inflater.inflate(R.layout.fragment_layout, container, false);
//set the text of your text view
TextView textView = (TextView) view.findViewById(R.id.text_view_id);
textView.setText(your_text);
}
}