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/