it-swarm.com.de

Ruft die Ansicht des Fragments von FragmentActivity ab

Ich habe ein FragmentActivity, wo ich ein Fragment hinzufüge. Abhängig von einer Situation möchte ich über das Layout dieses Fragments auf Buttons zugreifen und die Klick-Listener ändern.

Was ich mache ist:

View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());

Die Variable view ist jedoch immer null.

Wie kann ich die Aktivität sehen?

26
Drastamat

Wenn Sie auf Ihre Komponente zugreifen und einige Daten festlegen möchten, empfehlen wir Ihnen, eine Methode innerhalb des Fragments wie folgt zu erstellen:

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

versuche dies:

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

dieser Code muss gut funktionieren. Ich hoffe, dies wird dir helfen.

15

Überschreiben Sie onViewCreated in Ihrer Fragmentklasse, um OnClickListeners in Fragmenten festzulegen.

@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);
}

Ich habe versucht, eine Zeittask festzulegen, um eine Webansicht in einem Fragment automatisch neu zu laden, und diese Methode war das einzige, was für mich funktioniert hat. Mein Projekt ist auf Github .

Quelle: diese Antwort

3
JB0x2D1

Verwenden Sie einfach die Methode getRootView(), um die Daten Ihres Fragments in Activity abzurufen.

//below block of code write in activity.

EditText et = (EditText) v.getRootView().findViewById(R.id.name);
Log.d("Name", et.getText().toString());

name ist das Feld des Fragments.

Wenn Sie Ihre Schaltfläche in einer Klasse initialisieren, die Fragment erweitert, ist es besser, dies in der onViewCreated() -Methode zu tun. Dadurch wird sichergestellt, dass die Ansicht bereits vorhanden ist.

1
Alex P