使用textview切换活动

时间:2017-09-03 03:55:54

标签: android

我正在尝试在我的登录按钮下制作文字"还没有帐户?现在报名"当点击发送给我的RegisterFragment.so时,我在我的LoginFragment中为它添加了一个OnClickListener。

  @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 个答案:

答案 0 :(得分:2)

onCreateView()方法负责创建视图,因此您应该首先创建它。 您无法在getView()内直接使用onCreateView()

你需要先像

那样给它充气
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()应该创建&amp;返回视图。

喜欢

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
TextView signup = (TextView) view.findViewById(R.id.signup);
// and so on...
}

答案 1 :(得分:0)

  1. 我建议不要将点击监听器设置为您要输入的内容

  2. getView实际返回正确的onCreateView

  3. 之前,您无法致电View

    findViewById in Fragment

    1. RegisterFragment.class不是活动,您不能startActivity
    2. 使用FragmentManager

      getSupportFragmentManager().beginTransaction()
          .replace(R.id.<someContainer>, RegisterFragment.class)
          .commit();
      

      或者,您可以查看Communication between Fragments上的文档,了解如何在onLogin()onRegistrationSelected()操作上实现切换到注册片段或&#34;登录后&# 34;主要片段。