Не удается изменить вид фрагмента текста из метода - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь этим простым способом изменить представление текста фрагмента, но приложение вылетает каждый раз, когда я пытаюсь открыть активность фрагмента с помощью этого кода фрагмента

public class FragmentContrat extends Fragment {
    public FragmentContrat() {}

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.contrat_fragment, container, false);
        update();
        return view;

    }

    public void update() {
        TextView textView = (TextView)getView().findViewById(R.id.souscripteur_txt);
        textView.setText("milan");
    }

, однако оно работает нормально, иИзменение TextView, когда я помещаю тот же код в onCreateView, как это:

public class FragmentContrat extends Fragment {




    public FragmentContrat() {}


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.contrat_fragment, container, false);
        TextView textView = (TextView)view.findViewById(R.id.souscripteur_txt);
        textView.setText("milan");
        return view;

    }

код активности:

public class DetailsContrat extends AppCompatActivity {

    TabLayout details_tab;
    AppBarLayout details_bar;
    ViewPager details_pager;


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details_contrat);
        Intent i = getIntent();
        String client_id = i.getStringExtra("client_id");
        details_tab=(TabLayout)findViewById(R.id.details_tab);
        details_bar=(AppBarLayout) findViewById(R.id.details_bar);
        details_pager=(ViewPager)findViewById(R.id.details_pager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        FragmentContrat fragmentContrat = new FragmentContrat();
        FragmentVehicule fragmentVehicule = new FragmentVehicule();
        FragmentGaranties fragmentGaranties = new FragmentGaranties();



 adapter.AddFragment(fragmentContrat,"MON CONTRAT");
        adapter.AddFragment(fragmentVehicule,"MA VOITURE");
        adapter.AddFragment(fragmentGaranties,"MES GARANTIES");
        details_pager.setAdapter(adapter);
        details_tab.setupWithViewPager(details_pager);


    }



}

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

В onCreateView вы создаете и вид фрагмента. Поэтому, если вы вызовете getView(), чтобы получить представление фрагмента, вы получите нулевое значение, потому что вы еще не вернули только что созданное представление.

Вы можете:

  1. Используйте только что созданный вид, аналогичный тому, который рекомендует @ Sanjaysinh's
  2. Не устанавливайте текст в onCreateView и устанавливайте его в onViewCreated(View view, Bundle savedInstanceState), который вызывается после создания представления ( docs )
0 голосов
/ 16 марта 2019

Я думаю, вам нужно передать свое мнение в методе обновления

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.contrat_fragment, container, false);
    update(view);
    return view;

}

public void update(View view) {
    TextView textView = (TextView)view.findViewById(R.id.souscripteur_txt);
    textView.setText("milan");
}
...