提问者:小点点

使用文本视图切换活动


我试图让我的登录按钮下的文本"没有帐户呢?立即注册"当点击发送我到我的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"/>

拜托,伙计们,我真的需要你们的帮助。


共2个答案

匿名用户

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选择()上实现交换到注册片段或登录后主片段的操作。