簡體   English   中英

如何在Android中單擊按鈕之間在片段之間切換?

[英]How to switch between fragments from button click in android?

我正在創建一個Android應用。 它包含兩個活動。 一個用於登錄,另一個用於注冊。 它們都位於單獨的標簽中,我可以通過滑動來在它們之間切換。

但是,如果需要登錄,則兩個選項卡的底部都有一個按鈕。 單擊該按鈕時,我需要移至注冊選項卡,還要單擊另一個按鈕以返回登錄選項卡。

如何使用onclick監聽器事件實現它?

public static class PlaceholderFragment extends Fragment {

    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    public PlaceholderFragment() {
    }
    private static final String lTAG = RegisterActivity.class.getSimpleName();
    private Button btnLogin;
    private Button btnLinkToRegister;
    private EditText linputEmail;
    private EditText linputPassword;
    private ProgressDialog lpDialog;
    private SessionManager lsession;
    private SQLiteHandler ldb;
    private static final String rTAG = RegisterActivity.class.getSimpleName();
    private Button btnRegister;
    private Button btnLinkToLogin;
    private EditText rinputFullName;
    private EditText rinputEmail;
    private EditText rinputPassword;
    private ProgressDialog rpDialog;
    private SessionManager rsession;
    private SQLiteHandler rdb;
     public static Context context;

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        if(getArguments().getInt(ARG_SECTION_NUMBER)==1) {

            View rootView = inflater.inflate(R.layout.activity_login, container, false);
            linputEmail = (EditText) rootView.findViewById(R.id.email);
            linputPassword = (EditText) rootView.findViewById(R.id.password);
            btnLogin = (Button) rootView.findViewById(R.id.btnLogin);
            btnLinkToRegister = (Button) rootView.findViewById(R.id.btnLinkToRegisterScreen);

            // Progress dialog
            lpDialog = new ProgressDialog(getActivity());
            lpDialog.setCancelable(false);

            // SQLite database handler
             context=getContext();
            ldb = new SQLiteHandler(context);

            // Session manager
            lsession = new SessionManager(context);

            // Check if user is already logged in or not
            if (lsession.isLoggedIn()) {
                // User is already logged in. Take him to main activity
                Intent intent = new Intent(context, MainActivity.class);
                startActivity(intent);
                getActivity().finish();
            }

            // Login button Click Event
            btnLogin.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {
                    String email = linputEmail.getText().toString().trim();
                    String password = linputPassword.getText().toString().trim();


                    // Check for empty data in the form
                    if (!email.isEmpty() && !password.isEmpty()) {
                        // login user
                        checkLogin(email, password);
                    } else {
                        // Prompt user to enter credentials
                        Toast.makeText(context,
                                "Please enter the credentials!", Toast.LENGTH_LONG)
                                .show();
                    }
                }

            });

            // Link to Register Screen
            btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {

                    Intent i = new Intent(context,
                            RegisterActivity.class);
                    startActivity(i);
                    getActivity().finish();
                }
            });
            return  rootView;
        }

        else if (getArguments().getInt(ARG_SECTION_NUMBER)==2){

            View rootView = inflater.inflate(R.layout.activity_register, container, false);
            rinputFullName = (EditText) rootView.findViewById(R.id.name);
            rinputEmail = (EditText) rootView.findViewById(R.id.email);
            rinputPassword = (EditText) rootView.findViewById(R.id.password);
            btnRegister = (Button) rootView.findViewById(R.id.btnRegister);
            btnLinkToLogin = (Button) rootView.findViewById(R.id.btnLinkToLoginScreen);

            // Progress dialog
            rpDialog = new ProgressDialog(getActivity());
            rpDialog.setCancelable(false);

            // Session manager
            context=getContext();
            rsession = new SessionManager(context);

            // SQLite database handler
            rdb = new SQLiteHandler(context);

            // Check if user is already logged in or not
            if (rsession.isLoggedIn()) {
                // User is already logged in. Take him to main activity
                Intent intent = new Intent(context,
                        MainActivity.class);
                startActivity(intent);
                getActivity().finish();
            }

            // Register Button Click event
            btnRegister.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    String name = rinputFullName.getText().toString().trim();
                    String email = rinputEmail.getText().toString().trim();
                    String password = rinputPassword.getText().toString().trim();

            if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) {
                        if(isEmailValid(email)) {
                            registerUser(name, email, password);
                        }else{
                            Toast.makeText(context,
                                    "Please enter valid email!", Toast.LENGTH_LONG)
                                    .show();
                        }
                    } else {
                        Toast.makeText(context,
                                "Please enter your details!", Toast.LENGTH_LONG)
                                .show();
                    }
                }
            });

            // Link to Login Screen
            btnLinkToLogin.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {
                    Intent i = new Intent(context,
                            LoginActivity.class);
                    startActivity(i);
                    getActivity().finish();
                }
            });

            return  rootView;

        }
        return null;
    }
    ``
/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "LOGIN";
            case 1:
                return "REGISTER";

        }
        return null;
    }
}

這種情況有兩種可能性:

  1. 如果要將一個片段切換到另一個片段,則必須使用framelayout而不是viewpager。
  2. 如果使用framelayout,則無法滑動選項卡。必須單擊選項卡才能對其進行更改。

    使用framelayout后,您可以從主要活動中獲取famelayout ID,還可以使用FragmentTransaction切換片段。

    在按鈕上單擊片段

      FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.framelayout, new TwoFragment(), "NewFragment TAG"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM