我正在使用ToDoActiviy.cs
进行用户登录,这个类有这个方法:
[Java.Interop.Export()]
public async void LoginUser(View view)
{
if(await authenticate())..
从Button小部件android:onClick="LoginUser"
中的.axml文件调用此方法我为android:onClick="LoginUserClick"
更改了此方法。此最后一个方法创建一个对话框片段,用于显示不同的登录帐户。
现在从Dialog Fragment(位于另一个类)我想要按下对话框片段上的按钮点击事件,并从ToDoActivity.cs
调用此方法。
在对话框片段类中,我按下这样的点击事件:
private void ButtonSignInFacebook_Click(object sender, EventArgs args){
//Here code for call to LoginUser method from 'ToDoActivity.cs'
ToDoActiviy.cs act = new ToDoActivity();
act.LoginUser();
}
我需要传递一个视图,但我尝试了很多东西和任何工作..
有人可以帮助我吗?
提前致谢;)
答案 0 :(得分:3)
我想对@ guido-gabriel的回答略作修改。
在C#语法中,它将是
((ToDoActivity)Activity).yourPublicMethod();
Java中的Getter / Setter方法映射到Xamarin.Android中的Getter Setter属性
答案 1 :(得分:1)
最后我修好了!我不得不更改方法的参数并创建它没有参数..现在正在工作。两种解决方案都很好:
//ToDoActivity act = new ToDoActivity();
//act.LoginUserFacebook();
class (Eq a, Show a) => C a where
答案 2 :(得分:0)
您必须从活动中调用该方法。你试过吗?
((YourActivityClassName)getActivity()).yourPublicMethod();
即
((ToDoActivity)getActivity()).yourPublicMethod();
答案 3 :(得分:0)
在片段中调整并使用下面的剪辑
var casted = Activity as MyActivityName;
if (casted != null) {
casted.IWantToCallThisMethodFromMyFragment();
}
答案 4 :(得分:0)
这不是一个好习惯。为什么呢?
这样做会将Fragment紧密地耦合到这个特定的Activity类型,这意味着无法在代码中的其他地方重用Fragment。
相反,我建议您依靠活动订阅一个事件或实现某种回调方法,以便在登录后执行所需的操作。
看起来你的Activity可能包含很多可以拆分成某种共享库的逻辑。使得可以在另一个平台上重用该代码,例如将来的iOS。
因此,由于你负责新片段,我会做这样的事情:
public class LoginFragment : Fragment
{
Action _onLoggedIn;
public static void NewInstance(Action onLoggedIn)
{
var fragment = new LoginFragment();
fragment._onLoggedIn = onLoggedIn;
return fragment;
}
private void Login()
{
// login user
// after loggedin
_onLoggedIn?.Invoke();
}
}
然后在你的活动中:
private void LoginUser()
{
// whatever
}
var loginFragment = LoginFragment.NewInstance(LoginUser);
// fragment transaction here...