从片段中启动活动

时间:2016-01-16 18:52:07

标签: android android-fragments

我有一个带有单个片段的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?

谢谢

2 个答案:

答案 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