J'ai un FragmentActivity
où j'ajoute un Fragment
. En fonction de certaines situations, je souhaite accéder à Buttons
à partir de la disposition de ce fragment et en changer les écouteurs de clic.
Ce que je fais c'est:
View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());
Mais la variable view
est toujours null
.
Comment obtenir la vue de l'activité?
Si vous souhaitez accéder à votre composant et définir certaines données, je vous suggère de créer une méthode à l'intérieur du fragment comme ceci:
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.Button;
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 setSettings(){
Button button = (Button) getView().findViewById(R.id.my_button);
button.setOnClickListener(new MyClickListener());
}
}
essaye ça:
public class YourFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.your_fragment, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View view = getView();
if(view != null) {
view.findViewById(R.id.my_button).setOnClickListener(new MyClickListener());
}
}
}
ce code doit bien fonctionner. J'espère que cela t'aidera.
Pour définir OnClickListeners dans des fragments, remplacez onViewCreated
dans votre classe de fragments.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.yourId).setOnClickListener(this);
//or
getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}
J'essayais de définir une tâche temporelle pour recharger automatiquement une vue Web dans un fragment et cette méthode était la seule chose qui fonctionnait pour moi. Mon projet est sur github .
Source: cette réponse
Utilisez simplement la méthode getRootView()
pour obtenir les données de votre fragment dans Activity.
//below block of code write in activity.
EditText et = (EditText) v.getRootView().findViewById(R.id.name);
Log.d("Name", et.getText().toString());
nom est le domaine du fragment.
Lorsque vous initialisez votre bouton à l'intérieur d'une classe qui étend Fragment
, il est préférable de le faire à l'intérieur de la méthode onViewCreated()
. Cela garantira que la vue existe déjà.