我有一个带有单个片段的Activity,要求用户登录。一旦该人登录,就会启动一个新的活动。我的问题是,一旦该人输入他们的凭据并点击片段上的登录按钮
A)片段首先提醒其当前的Activity,然后从那里开始新的Activity。例如,这是我的片段:
public class LoginFragment extends Fragment implements View.OnClickListener {
private Button loginButton;
private ClickedInterface clickedInterface;
public LoginFragment() {
// Required empty public constructor
}
static interface ClickedInterface{
public void buttonClicked(View v);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login, container, false);
loginButton = (Button)view.findViewById(R.id.fragment_login_loginButton);
loginButton.setOnClickListener(this);
return view;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.clickedInterface = (ClickedInterface)activity;
}
@Override
public void onDetach() {
super.onDetach();
clickedInterface = null;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.fragment_login_loginButton:{
clickedInterface.buttonClicked(v);
break;
}
}
}
以下是使用ClickedInterface方法的Activity:
@Override
public void buttonClicked(View v) {
switch (v.getId()){
case R.id.fragment_login_loginButton:{
//Do Stuff
break;
}
}
}
OR
B)从Fragment中启动新的Activity?
谢谢
答案 0 :(得分:2)
这完全取决于您的片段中的业务逻辑,以及您是否在多个活动中使用它。例如,您可能有一个共享按钮,以及一个发送Intent来为Play商店中的应用评分的按钮。
在共享方案中,您可能希望每个活动都有不同的共享文本。在这种情况下,您将获得活动的引用,检查它是否实现了接口,然后将所有内容委托给活动:
// share scenario (delegate to Activity)
if (getActivity() instanceof MyCallback) {
((MyCallback)getActivity()).launchMyIntent(); // TODO handle callback in activity
}
但是,如果您知道一个事实,即无论您在应用程序中的哪个位置(例如使用评级按钮),您只需要一种行为,那么直接从片段发送您的意图可能是有意义的。
// rating scenario (send intent from fragment
getActivity().startActivity(myIntent);
答案 1 :(得分:1)
最好的方法是将控件传递给MainActivity,然后让活动完成剩下的工作。
第二种做法是 - >在MainActivity中创建一个静态方法,如openPostLoginActivity
,并从您的片段中调用它。这样,您可以确保全局操作始终驻留在父操作中。当你有多个片段时,这将主要帮助你。我见过 pubnub示例android app
第三是你提到的那个。从片段本身打开它。
坦率地说,在您的方案中,您可以使用上述任何一种方法。这取决于你是想要坚持标准还是只想让你的工作完成。一切顺利!! 1