尝试从片段中调用我的活动中的方法。我希望片段提供方法数据并在方法返回时获取数据。我想实现类似于调用静态方法,但不使用静态方法是因为它会在活动中创建问题。
对片段新手,需要简单易懂的解释!
谢谢!
对片段新手,需要简单易懂的解释!
谢谢!
((KidsStoryDashboard)getActivity()).values(title_txt,bannerImgUrl);
public void values(String title_txts, String bannerImgUrl) {
if (!title_txts.isEmpty()) {
//Do something to set text
}
imageLoader.displayImage(bannerImgUrl, htab_header_image, doption);
}
((your_activity) getActivity).method_name()
在这里,your_activity
是您的活动名称,method_name()
是您想要调用的方法名称。
public void methodExemple(View view){
// your code here
Toast.makeText(view.getContext(), "Clicked clicked",Toast.LENGTH_LONG).show();
}
new ExempleFragment().methodExemple(context);
我尝试了本帖中提到的所有方法,但都没有起作用。尝试这个方法。它对我有效。
((MainActivity) getContext().getApplicationContext()).Method();
对于Kotlin,尝试一下
class DataForm : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Tasks(this).getData()
}
fun getResponse(response: String) {
// code
}
}
class Tasks(private val context: Any) {
fun getData() {
val getContext = (context as DataForm).activity
val getFragment = (context as DataForm)
val responseListener = Response.Listener<String> { response ->
getFragment.getResponse(response)
}
val errorListener = Response.ErrorListener { error ->
error.printStackTrace();
}
val stringRequest = StringRequest(Request.Method.GET, url, responseListener, errorListener)
Volley.newRequestQueue(getContext).add(stringRequest)
}
}
我认为在初始化Fragment时,通过传递activity
实例会是更好的方式。我像下面这样传递了实例:
class FragmentSignUp : Fragment() {
private lateinit var authActivity: AuthenticateActivity
...
companion object {
fun newInstance(a: AuthenticateActivity): FragmentSignUp {
val fragment = FragmentSignUp()
fragment.authActivity = a
return fragment
}
}
}
现在您可以使用传递的活动实例初始化片段,并且还可以调用活动中的任何公共方法。如下所示:
val fragmentManager = supportFragmentManager
val fragment = FragmentSignUp.newInstance(this)
fragmentManager.beginTransaction().replace(R.id.authenticate_fragment, fragment, FragmentSignUp::class.java.simpleName)
.commit()
authactivity.goToLogInFragment()
在Java中,你的片段类应该是:
public class FragmentSignUp extends Fragment {
private AuthenticateActivity authActivity;
public static FragmentSignUp newInstance(AuthenticateActivity a) {
FragmentSignUp fragment = new FragmentSignUp();
fragment.authActivity = a;
return fragment;
}
}
注意:我们也可以直接将活动注入到片段构造函数中。但在大多数情况下,我们应该避免这样做,因为它可能会导致一些运行时问题。
从片段到活动:
((YourActivityClassName)requireActivity()).yourPublicMethod();
((YourActivityName)getActivity()).functionName();
示例:((SessionActivity)getActivity()).changeFragment();
注意:类名应为public。