我想从fragment2调用MainActivity的函数Ask()。 如何从fragment2调用MainActivity的函数? 我想将结果导入到从fragment2调用的页面中。
编辑: 我已经看到了这个讨论,但没有解决我的问题。
答案 0 :(得分:0)
将该函数设为静态,之后您可以在Fragment中访问该函数,例如MainActivity.Ask();
答案 1 :(得分:0)
从片段到激活:
FragmentManager fm = getSupportFragmentManager();
//if you added fragment via layout xml
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();
从活动到片段:
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
如果您在添加片段时通过代码添加片段并使用了标记字符串,请改用findFragmentByTag:
DECLARE SickHours CURSOR FOR
select distinct e.BusinessEntityID, p.FirstName, p.LastName, e.JobTitle, e.SickLeaveHours,
round(eph.Rate, 2) as NewHourlyRate
from Person.Person p
inner join HumanResources.Employee e
on p.BusinessEntityID = e.BusinessEntityID
inner join HumanResources.EmployeePayHistory eph
on e.BusinessEntityID = eph.BusinessEntityID
where e.SickLeaveHours <= 20;
OPEN SickHours;
FETCH NEXT FROM SickHours;
WHILE @@FETCH_STATUS = 0
BEGIN
update HumanResources.EmployeePayHistory
set Rate = (Rate * 1.1), ModifiedDate = GETDATE()
FETCH NEXT FROM SickHours;
END;
CLOSE SickHours;
DEALLOCATE SickHours;
GO
干杯!
答案 2 :(得分:0)
我建议你阅读this documentation。
从fragment2调用MainActivity的函数Ask()。
为此,您需要在interface
中创建fragment2
。以下代码是文档中的示例。您也不应该忽略片段中的onAttach
方法。
public class Fragment2 extends ListFragment {
OnCallActivityListener mCallback;
// Container Activity must implement this interface
public interface OnCallActivityListener {
public void callAskMethod();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnCallActivityListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
...
}
现在,片段可以通过使用callAskMethod()
接口的mCallback实例调用OnCallActivityListener
方法(或接口中的其他方法)来向活动传递消息。
例如,当用户单击列表项时,将调用片段中的以下方法。该片段使用回调接口将事件传递给父活动。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Send the event to the host activity
mCallback.callAskMethod();
}
之后,您应该在主机活动中实现该接口。
public static class MainActivity extends Activity
implements Fragment2.OnCallActivityListener{
...
public void callAskMethod() {
// Do something here
ask();
}
}
就是这样。您已从ask()
片段调用fragment2
方法。
我想将结果导入到从fragment2调用的页面中。
主机活动可以通过使用Fragment
捕获findFragmentById()
实例来向片段传递消息,然后直接调用片段的公共方法。
在你的`MainActivity中,你可以调用将结果发送到片段。
Fragment2 fragment2 = (Fragment2) getSupportFragmentManager().findFragmentById(R.id.article_fragment);
因此,您在Fragment2
中拥有MainActivity
的实例值。因此,您可以使用fragment2
的任何公共方法。
例如
fragment2.doSomething();
就是这样。