java - 如何使用按钮在 fragment 之间切换

标签 java android

fragment 1:

public class homePage extends Fragment {


private OnFragmentInteractionListener mListener;
private View view;

public homePage() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_home_page, container, false);
    Button btnLogin = (Button) view.findViewById(R.id.login);
    Button btnRegister = (Button) view.findViewById(R.id.register);
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loginView();
        }
    });
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            registerView();
        }
    });
    return view;
}


public static homePage newInstance() {
    homePage fragment = new homePage();
    Bundle args = new Bundle();
    return fragment;
}


public void registerView(){}
public void loginView(){}


public interface OnFragmentInteractionListener {

}
}

Activity :

 public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        homePage homepage = new homePage();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, homepage)
                    .commit();
        }
    }




 }

我的fragment1有两个按钮,id分别是“登录”和“注册”。每当单击“登录”时,我想转到我的fragment_login.xml,当单击“注册”时,我想转到我的fragment_register.xml。我应该在我的 Activity 中还是在我的 fragment 中创建这些函数?我应该怎么做?我对 android 相当陌生,我正在尝试学习这些基本的东西。感谢您的帮助:(

登录上下文:“com.example.hoofdgebruiker.winkelskortrijk.login” 注册上下文:“com.example.hoofdgebruiker.winkelskortrijk.register”

最佳答案

您必须通过接口(interface)Fragment对象之间进行通信。

在 fragment 之间进行切换的 Activity 需要实现该接口(interface)

因此,在您的情况下,您的类必须定义如下。这是您的界面,它可以帮助您告诉您的 Activity,已从您的 Fragment 中单击了按钮:

public interface HomeClickListener {
    void onLoginClick();
    void onRegisterClick();
}

您的 Activity 需要实现上述接口(interface),以便在单击按钮时收到通知:

public class HomeActivity extends Activity implements HomeClickListener {

    void onLoginClick() {
        // Your activity code to replace your current Fragment with your Login fragment
    }

    void onRegisterClick() {
        // Your activity code to replace your current Fragment with your Register fragment
    }

}

您的 fragment 由 Activity 托管,因此您需要引用它并通过接口(interface)通知它:

public class LoginFragment extends Fragment {

    final HomeClickListener homeClickListener

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            homeClickListener = (homeClickListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_home_page, container, false);
        Button btnLogin = (Button) view.findViewById(R.id.login);
        Button btnRegister = (Button) view.findViewById(R.id.register);
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                homeClickListener.onLoginClick();
            }
        });
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                homeClickListener.onRegisterClick();
            }
        });
        return view;
    }

}

更多信息here .

关于java - 如何使用按钮在 fragment 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554012/

相关文章:

java - 选中或未选中时立即获取复选框状态

java - 如何使用来自 firebase 实时数据库的电子邮件检索数据?

java - 如何在Instant Apps中实现Multi Dex?

android - 如何在android项目的每个 Activity 中调用一个函数?

android - 显示 HttpsURLConnection 发送的实际原始数据 + HTTPS header

android - 如何保持与 Smack XMPP 的连接?

java - DB2 中使用 INTERSECT 的交集

java - 从字符串中创建列表的名称

java - 一个变量减少而另一个变量增加

android - 设备播放的声音比代码中的声音大