试图从片段中调用我的活动中的方法。我想要片段给方法数据,并在方法返回时获得数据。我想实现类似于对静态方法的调用,但不使用静态,因为它会在活动中产生问题。
新的片段,所以我需要一个简单的和教学的解释!
谢谢!
试图从片段中调用我的活动中的方法。我想要片段给方法数据,并在方法返回时获得数据。我想实现类似于对静态方法的调用,但不使用静态,因为它会在活动中产生问题。
新的片段,所以我需要一个简单的和教学的解释!
谢谢!
当前回答
((YourActivityName) getActivity ()) .functionName ();
示例:((SessionActivity)getActivity()).changeFragment();
注意:类名应该是公开的
其他回答
在kotlin中,你可以从片段中调用activity方法,如下所示:
var mainActivity: MainActivity = activity as MainActivity
mainActivity.showToast() //Calling show toast method of activity
我已经尝试了这个线程中显示的所有方法,没有一个对我有效,试试这个。这对我很管用。
((MainActivity) getContext().getApplicationContext()).Method();
((your_activity) getActivity).method_name()
your_activity是你活动的名称,method_name()是你想调用的方法的名称。
以下是我的做法:
首先制作接口
interface NavigationInterface {
fun closeActivity()
}
接下来确保activity实现了接口并覆盖了接口方法
class NotesActivity : AppCompatActivity(), NavigationInterface {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_notes)
setSupportActionBar(findViewById(R.id.toolbar))
}
override fun closeActivity() {
this.finish()
}
}
然后确保在片段中创建接口侦听器
private lateinit var navigationInterface: NavigationInterface
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
//establish interface communication
activity?.let {
instantiateNavigationInterface(it)
}
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_notes_info, container, false)
}
private fun instantiateNavigationInterface(context: FragmentActivity) {
navigationInterface = context as NavigationInterface
}
然后你就可以这样打电话了:
view.findViewById<Button>(R.id.button_second).setOnClickListener {
navigationInterface.closeActivity()
}
从碎片到活动:
((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");