J'essaie d'utiliser des fragments pour créer ma première application Android .. .. J'ai un fichier XML principal. qui se compose de deux fragments verticaux, les fragments du haut se compose de seulement deux TextViews. Le premier contient du texte statique et le second contient une valeur que j'obtiendrai de manière dynamique à partir de SQL.
Si je mets ceci est mon MainActivity.Java, alors il met heureusement à jour la valeur de TextView dans mon premier fragment:
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");
}
J'ai deux fragments XML et un Java pour les prendre en charge. Je souhaite donc définir le paramètre de ce champ dans Java qui prend en charge le fragment plutôt que dans Java pour MainActivity.
Quand je le mets dans le fragment, cela ressemble à ceci: -
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");
}
Mais si je le fais, j'obtiens une erreur sur la ligne TextView:
"La méthode findViewById (int) n'est pas définie pour le type FragmentMainTop"
Alors pourquoi ne connait-il pas cette méthode? J'ai ctl/shift/o donc je sais que j'ai tous les droits d'importation . Je ne veux pas finir par mettre tout mon code dans MainActivity car si je veux utiliser ensuite le fragment dans une autre activité, je l'aurai répéter tout le code.
Vous devez affecter la disposition du fragment gonflé à une variable afin de pouvoir accéder à sa méthode findViewById()
. Ensuite, vous le retournez une fois que vous avez terminé de mettre à jour vos widgets.
@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;
}
Normalement, lorsque vous appelez findViewById()
dans une Activity
, vous appelez Activity.findViewById()
. Essayer le même appel dans votre classe Fragment
échouera car il n’existe pas de telle méthode Fragment.findViewById()
. Donc, vous devez utiliser View.findViewById()
avec votre vue gonflée pour obtenir des références à vos widgets.
Je ne suis pas un expert, mais je dirais que l'instruction return d'une méthode renvoie quelque chose et que les lignes suivantes après cette instruction sont inaccessibles: O
Alors essayez de changer l'ordre! :)
J'utilise ce code de mon activité pour mettre à jour une vue de texte ajoutée dans une balise xml. Le textview sont des objets de niveau classe. Heres du code:
<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" />
Voici le code de fragment montrant simplement la variable de niveau de classe.
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
}
}
Maintenant l'activité depuis laquelle je mets à jour mon fragment:
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");
}
});
}
}
Remarque: pas sûr que ce soit un bon moyen.