我有一个片段,我正在收听按钮点击事件。我正在使用此代码:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (usernameL.getText().toString().equals("") == false && passwordL.getText().toString().equals("") == false) {
final String usernameVal=usernameL.getText().toString();
final String passwordVal=passwordL.getText().toString();
((MainActivity)getActivity()).login(usernameVal,passwordVal);
}
}
});
这是一个好方法吗?如果是错的,应该怎么做?
答案 0 :(得分:1)
您的代码可以使用,但这不是最好的方法。它的问题在于它将您的片段与MainActivity联系起来 - 理想情况下,片段不应该知道启动它的活动。更好的解决方案是使用回调接口。让你的片段定义一个接口:
public interface LoginCallback{
onLoginPressed(String user, String pword);
}
然后在片段setLoginCallback(LoginCallback)中有一个函数,它设置一个LoginCallback实例。当用户按下按钮时,在该实例上调用onLoginPressed。
您的Activity将创建一个LoginCallback类型的对象,或者将实现该接口本身。
这样做的好处是片段不需要知道有关活动的任何信息 - 它自包含。缺点是在活动中设置片段(您需要设置登录回调)需要做更多的工作。