webentwicklung-frage-antwort-db.com.de

Aufrufen einer Fragment-Methode aus einer übergeordneten Aktivität

Ich sehe im Android Fragments Dev Guide , dass eine "Aktivität Methoden in einem Fragment aufrufen kann, indem ein Verweis auf das Fragment von FragmentManager mit findFragmentById() oder findFragmentByTag() abgerufen wird".

Das folgende Beispiel zeigt, wie eine Fragmentreferenz abgerufen wird, nicht jedoch, wie bestimmte Methoden im Fragment aufgerufen werden.

Kann jemand ein Beispiel geben, wie das geht? Ich möchte eine bestimmte Methode in einem Fragment aus der übergeordneten Aktivität aufrufen. Vielen Dank.

106
gcl1

die Frage nicht genau bekommen, da es zu einfach ist:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>(); 

Update: Für diejenigen, die Kotlin verwenden

var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()
184
Dheeresh Singh

Wenn Sie "Import Android.app.Fragment;" .__ verwenden, verwenden Sie entweder:

1) 

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

Bei R.id.example_fragment handelt es sich höchstwahrscheinlich um die FrameLayout-ID in Ihrem XML-Layout. ODER

2) 

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 

Dabei ist FragTagName der Name, den Sie angegeben haben, als Sie dies getan haben:

TabHost mTabHost.newTabSpec(“FragTagName”)

Wenn Sie "import Android.support.v4.app.Fragment;" verwenden Dann verwenden Sie entweder:

1) 

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

OR

2) 

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 
74
Gene

Wenn Sie eine Unterstützungsbibliothek verwenden, sollten Sie Folgendes tun:

FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
9
JDJ
  1. Wenn Sie kein Support Library-Fragment verwenden, gehen Sie wie folgt vor:

((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();


2. Wenn Sie ein Unterstützungsbibliothek-Fragment verwenden, gehen Sie wie folgt vor:

((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

4
Chintan Shah

Ich denke, das Beste ist, zu prüfen, ob Fragment hinzugefügt wird, bevor die Methode in Fragment aufgerufen wird. Tun Sie so etwas, um eine Null-Ausnahme zu vermeiden. 

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
  fragment.<specific_function_name>(); 
}
3
Surjit Singh
FragmentManager fm = getFragmentManager(); 
MainFragment frag = (MainFragment)fm.findFragmentById(R.id.main_fragment); 
frag.<specific_function_name>(); 
1
Kishore Reddy

Vom Fragment zur Aktivität:

((YourActivityClassName)getActivity()).yourPublicMethod();

Von der Aktivität zum Fragment:

FragmentManager fm = getSupportFragmentManager ();

//if you added fragment via layout xml
YourFragmentClass fragment = 
(YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();

Wenn Sie Fragment über Code hinzugefügt und einen tag string verwendet haben, als Sie Ihr Fragment hinzugefügt haben, verwenden Sie stattdessen findFragmentByTag :

YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
1
Bharat Vasoya

Ich weiß nichts über Java, aber in C# (Xamarin.Android) muss das Fragment nicht jedes Mal nachgeschlagen werden, wenn Sie die Methode aufrufen müssen (siehe unten):

public class BrandActivity : Activity
{
    MyFragment myFragment;

    protected override void OnCreate(Bundle bundle)
    {       
        // ...
        myFragment = new MyFragment();      
        // ...
    }

    void someMethod()
    {
        myFragment.MyPublicMethod();
    }
}

public class MyFragment : Android.Support.V4.App.Fragment
{
    public override void OnCreate(Bundle bundle)
    {
        // ...
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
    {
        // ...
    }

    public void MyPublicMethod()
    {
        // ...
    }   
}

Ich denke in Java können Sie das gleiche tun.

0
Mehdi Dehghani

sie rufen auch die Fragment-Methode über die Schnittstelle like auf 

zuerst erstellen Sie eine Schnittstelle 

interface name{

void methodname();

}

nach dem Erstellen der Schnittstelle implementieren Sie die Schnittstelle in Ihrem Fragment 

myfragment extends Fragment implement interfacename

{


@overide
void methodname()
{

}
}

und Sie erstellen die Referenz der Schnittstelle in Ihrer Aktivität 

class Activityname extends AppCompatActivity
{

Button click;
Myfragment fragment;

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

click=findViewById(R.id.button);

fragment=new fragment();

click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               fragment.methodname();
            }
        });

}

}
0
user10143207

Zuerst erstellen Sie eine Methode in Ihrer fragment-ähnlichen

public void name()
{


}

in Ihrer activity fügen Sie dies hinzu 

add onCreate() Methode 

myfragment fragment=new myfragment()

rufen Sie schließlich die Methode auf, bei der Sie aufrufen möchten, fügen Sie dies hinzu

fragment.method_name();

versuchen Sie diesen Code

0
user10143207