试图从片段中调用我的活动中的方法。我想要片段给方法数据,并在方法返回时获得数据。我想实现类似于对静态方法的调用,但不使用静态,因为它会在活动中产生问题。
新的片段,所以我需要一个简单的和教学的解释!
谢谢!
试图从片段中调用我的活动中的方法。我想要片段给方法数据,并在方法返回时获得数据。我想实现类似于对静态方法的调用,但不使用静态,因为它会在活动中产生问题。
新的片段,所以我需要一个简单的和教学的解释!
谢谢!
当前回答
虽然我完全喜欢Marco的回答,但我认为指出你也可以使用基于发布/订阅的框架来实现相同的结果是公平的,例如,如果你使用事件总线,你可以做到以下几点
片段:
EventBus.getDefault().post(new DoSomeActionEvent());
活动:
@Subscribe
onSomeActionEventRecieved(DoSomeActionEvent doSomeActionEvent){
//Do something
}
其他回答
对于Kotlin开发人员
(activity as YourActivityClassName).methodName()
针对Java开发人员
((YourActivityClassName) getActivity()).methodName();
谢谢@BIJAY_JHA和@Manaus。我使用Kotlin版本来调用我的signIn()方法,该方法存在于活动中,并且我从一个片段中调用。我在Android中使用导航架构,所以监听器接口模式不在片段中:
(activity as MainActivity).signIn()
从碎片到活动:
((YourActivityClassName)getActivity()).yourPublicMethod();
从活动到片段:
FragmentManager fm = getSupportFragmentManager();
//if you added fragment via layout xml
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();
如果你通过代码添加片段,并且在添加片段时使用了标签字符串,请使用findFragmentByTag代替:
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
在kotlin中,你可以从片段中调用activity方法,如下所示:
var mainActivity: MainActivity = activity as MainActivity
mainActivity.showToast() //Calling show toast method of activity
对于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)
}
}