gcl*_*cl1 113 android android-fragments
我在Android Fragments Dev Guide中看到,"活动可以通过使用findFragmentById()或从FragmentManager获取对片段的引用来调用片段中的方法findFragmentByTag()".
下面的示例显示了如何获取片段引用,但不显示如何调用片段中的特定方法.
任何人都可以举例说明如何做到这一点?我想从父Activity调用片段中的特定方法.谢谢.
Dhe*_*ngh 198
没有完全得到问题,因为它太简单了:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
Run Code Online (Sandbox Code Playgroud)
更新: 对于那些使用Kotlin的人
var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()
Run Code Online (Sandbox Code Playgroud)
Gen*_*ene 75
如果你使用"import android.app.Fragment;"然后使用:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
Run Code Online (Sandbox Code Playgroud)
其中R.id.example_fragment最有可能是xml布局中的FrameLayout id.要么
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Run Code Online (Sandbox Code Playgroud)
其中FragTagName是你指定的名字:
TabHost mTabHost.newTabSpec(“FragTagName”)
Run Code Online (Sandbox Code Playgroud)
如果您使用"import android.support.v4.app.Fragment;"然后使用以下任一方法:
1)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
Run Code Online (Sandbox Code Playgroud)
要么
2)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是支持库,则需要执行以下操作:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
Run Code Online (Sandbox Code Playgroud)
小智 7
对于这个问题来说已经太晚了,但这是获取片段实例并调用片段中的方法的简单方法;您必须获取片段的实例,然后调用您的公共方法:
在你的片段中:
private static yourFragment instance;
Run Code Online (Sandbox Code Playgroud)
然后在onCreateView你的片段中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
instance= this;
View v = inflater.inflate(R.layout.fragment_tools, container, false);
binding = FragmentToolsBinding.inflate(inflater, container, false);
return v;
}
Run Code Online (Sandbox Code Playgroud)
而且在您的片段中,您必须有一个返回实例的静态方法:
public static yourFragment GetInstance()
{
return instance;
}
Run Code Online (Sandbox Code Playgroud)
然后你的片段中有一个公共方法,你想像这样调用它:
public void theMethod()
{
Toast.makeText(getActivity(), "Test", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以获取片段实例并调用你的非静态公共方法,如下所示:
yourFragment frag = yourFragment.GetInstance();
frag.theMethod();
Run Code Online (Sandbox Code Playgroud)
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2. 如果您使用的是支持库 Fragment,请执行以下操作:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
小智 5
从片段到活动:
((YourActivityClassName)getActivity()).yourPublicMethod();
Run Code Online (Sandbox Code Playgroud)
从活动到片段:
FragmentManager fm = getSupportFragmentManager();
//if you added fragment via layout xml
YourFragmentClass fragment =
(YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();
Run Code Online (Sandbox Code Playgroud)
如果您通过代码添加片段并在添加片段时使用了标签字符串,请改用findFragmentByTag:
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150034 次 |
| 最近记录: |