在片段中启动活动

时间:2015-10-12 20:10:42

标签: android button android-activity fragment onclicklistener

我正在尝试启动一个新的Tab1City活动,因为我点击Tab1Discover中的一个按钮,这是一个片段。 我尝试了几个组合,如果参数,查看stackoverflow,但它继续编译并使应用程序在启动时崩溃,使用:

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'

在Tab1Discover.onCreateView(Tab1Discover.java:32)

public class Tab1Discover extends Fragment {

@InjectView(R.id.buttonLille)
Button _loginButton;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    _loginButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            // Start the Signup activity
            Intent intent = new Intent(getActivity(), Tab1City.class);
            startActivity(intent);
        }
    });


    return inflater.inflate(R.layout.tab_1_disc1_main, container, false);
}
}

3 个答案:

答案 0 :(得分:2)

修改

我注意到(感谢评论)你正在使用RoboGuice。在quick search之后,我发现该引用只能在onViewCreated中使用,因此请将代码移到那里:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  return inflater.inflate(R.layout.tab_1_disc1_main, container, false);
}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);
  _loginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      // Start the Signup activity
      Intent intent = new Intent(getActivity(), Tab1City.class);
      startActivity(intent);
    }
  });
}

答案 1 :(得分:0)

根据您对@ InjectView'的使用情况,我猜测您正在使用ButterKnife 6.0.x.

你错过了ButterKnife的部分,你必须告诉它何时注入观点。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.tab_1_disc1_main, container, false);

    ButterKnife.inject(this, rootView);

    _loginButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            // Start the Signup activity
            Intent intent = new Intent(getActivity(), Tab1City.class);
            startActivity(intent);
        }
    });

    return rootView;
}

使用此代码,您可以告诉ButterKnife在何处查找视图,以便设置绑定。从这里开始,您只需添加所需的所有@InjectView,它就会自动处理绑定。

答案 2 :(得分:0)

非常感谢,现在正在运作:

If object_id('tempdb..#test1') vs If object_id('#test1')