我试图让我的登录按钮下的文本"没有帐户呢?立即注册"当点击发送我到我的RegisterFragment.so我添加了一个OnClickListener像这样在我的LoginFragment.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView signup = (TextView) getView().findViewById(R.id.signup);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginFragment.this.startActivity(new Intent(getActivity(), RegisterFragment.class));
}
});
但是当我运行代码时,应用程序会在这一行崩溃
TextView signup = (TextView) getView().findViewById(R.id.signup);
这是我的fragment_login. xml文件
<TextView android:id="@+id/signup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="No Account Yet? Signup_now"
android:gravity="center"
android:textSize="16dp"
android:clickable="true"/>
拜托,伙计们,我真的需要你们的帮助。
onCreateView()方法负责创建视图,所以你应该先创建它。你不能在onCreateView()
内部直接使用getView()
。
你需要先给它充气
View view = inflater.inflate(R.layout.my_layout, container, false);
然后使用
TextView signup = (TextView) view.findViewById(R.id.signup);
所以完整的代码应该是这样的
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_layout, container, false);
TextView signup = (TextView) view.findViewById(R.id.signup);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
另外,设置单击侦听器初始化TextView等应该在onViewCreated()
中完成。onCreateView()
应该只创建
喜欢
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
TextView signup = (TextView) view.findViewById(R.id.signup);
// and so on...
}
>
我建议不要将单击侦听器设置为要输入的内容
在onCreateView
实际返回正确的View
之前,您不能调用getView
片段中的findViewById
使用FragmentManager
getSupportFragmentManager().beginTransaction()
.replace(R.id.<someContainer>, RegisterFragment.class)
.commit();
或者,您可以查看片段之间通信的留档,以了解如何在onLogin()
或onStatstrationS选择()
上实现交换到注册片段或登录后主片段的操作。