web-dev-qa-db-fra.com

Obtenez une vue de Fragment à partir de FragmentActivity

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é?

26
Drastamat

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());
    }
}
29
Jarvis

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.

15
Volodymyr Yatsykiv

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

3
JB0x2D1

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.

1

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à.

1
Alex P