Actualiser fragment de vue lorsque le bouton est cliqué

J'ai un fragment de l'activité qui utilise un ViewPager pour afficher un ensemble de fragments. Sur le fragment d'activité, j'ai un bouton qui lorsqu'on clique dessus, il envoie un message à l'actuel fragment d'actualiser son contenu. Tout fonctionne ok (activité /actuel fragment de la communication) à l'exception du fait que je ne peut pas actualiser le fragment de la vue. Accéder à la vue courante par getView() ne fonctionne pas comme cette fonction renvoie null; il semble que, après le fragment est créé (sur ViewCreated est appelé) getView est détruit. Suis-je manqué quelque chose? Comment que je cause un fragment de redessiner son contenu par programmation? Il semble que la seule façon dont cela fonctionne est lorsque le fragment est créé à partir de l'activité parent. Dois-je supprimer et re-ajouter le fragment de nouveau pour ce faire?

Voici le code:

L'activité principale:

public class MainActivity extends FragmentActivity {
private MyAdapter mAdapter;
private static ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViewPager();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_test:
updateFragment();
return true;
default: return true;
}
}
private void updateFragment() {
for (int i=0; i< mAdapter.getCount(); i++) {
SampleFragment fragment = (SampleFragment) mAdapter.getItem(i);
fragment.update();
}
}
private void setupViewPager() {
try {
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(this.mAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
SampleFragment fragment = new SampleFragment(position); 
return fragment;
}
@Override
public int getCount() {
return 5;
}
}
}

et le fragment de la classe:

public class SampleFragment extends Fragment{
private int myPosition = -1;
public SampleFragment(int position) {
this.myPosition = position;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
update(view, "Updated from onCreateView");
return view;
}
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.textTitle).setOnClickListener(myClickListener);
}
private OnClickListener myClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.textTitle:
break;
}
}
};
public void update() {
update(getView(), "Updated from main");
}
private void update(View view, String subtitleText) {
TextView title = (TextView) view.findViewById(R.id.textTitle);
TextView subtitle = (TextView) view.findViewById(R.id.textSubtitle);
title.setText("Fragment " + myPosition);
subtitle.setText(subtitleText);
}
}

L'erreur se produit sur la vue.FindViewById (la vue est nulle) lorsqu'il est appelé à partir de l'élément de menu dans l'activité principale.

Pouvez-vous capture / stockage de la vue depuis votre mise en page que vous souhaitez modifier dans le fragment? Par exemple. TextView mTitle = (TextView)findById(R. id.titre); et puis plus tard, il suffit de modifier l'affichage du texte?
J'ai déjà essayé, mais ils s'avèrent être null ainsi quand j'ai besoin de mettre à jour la mise en page.
Seriez-vous en mesure de poster un peu de code pour aider à expliquer ce qui se passe?
J'ai affiché le code pour le fragment de l'activité et le fragment. Le problème est créé par l'appel à getView() à l'intérieur du fragment qui est appelé par le fragment.mise à jour() dans l'activité.
UgglyNoodle la réponse est bonne. Il semble que beaucoup de la question de l'endroit où vous êtes à la mise à jour du fragment. Dans Android, Adapters sont responsables de la mise à jour du contenu de la Views ils émettent (ils "s'adapter" les données à vue, en le remplissant). La même chose devrait être vraie pour Fragments, trop.

OriginalL'auteur a.p. | 2012-09-26