Android setOnClickListener在avd上崩溃我的应用程序

时间:2015-01-29 09:46:54

标签: java android android-studio

我是android dev新手,我使用NavigationDrawer活动创建了一个新项目,我使用的是Android Studio。问题是,当我添加一个按钮并创建 OnClickListener 时,应用程序会崩溃,但如果没有它,它会正常启动。请看下面的代码。
我尝试添加 setContentView(查看),但没有帮助

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); //comes by default
    setContentView(R.layout.fragment_main); //added by me, but doesnt help

    //referencing my button
    btnTest =  (Button)findViewById(R.id.btnTest);

    mNavigationDrawerFragment = (NavigationDrawerFragment)
            getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
    mTitle = getTitle();

    // Set up the drawer.
    mNavigationDrawerFragment.setUp(
            R.id.navigation_drawer,
            (DrawerLayout) findViewById(R.id.drawer_layout));

    //my event listeners
    //when i highlight the below code everythin works..these block cause the crash
     btnTest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });


}

我知道其他人已经解决了这个问题并解决了它,但我无法解决我的问题,请帮助,谢谢

2 个答案:

答案 0 :(得分:0)

没有Logcat我会说你的问题是以下之一:

  1. btnTest未在您的ActivityLayout(activity_main)中定义。如果是这种情况,请检查您的XML。

  2. btnTest是否在Fragment内?如果是这样,您应该将OnClickListener放在Fragment班级而不是Activity班级。

  3. 顺便说一下,第二个setContentView没有任何意义,你应该只使用一个。

    希望有所帮助

答案 1 :(得分:0)

setContentView(R.layout.activity_main); //comes by default
setContentView(R.layout.fragment_main); //added by me, but doesnt help

请勿两次致电setContentView。那个"默认出现" IDE是在生成Activity课程时为方便起见而提供的,如果您不需要,请将其删除。

其次,您要为View将片段布局设置为Activity。因此,除非该布局中包含R.id.btnTest,否则btnTest将为空,因此在调用NullPointerException时会导致setOnClickListener

删除此:

setContentView(R.layout.fragment_main);

在这里

setContentView(R.layout.activity_main); 

确保您的Activity的布局文件名为activity_main.xml,或将该引用替换为布局文件的名称。

编辑:我猜你在AS中选择​​了一个选项,在你的Activity中生成一个占位符,并在其中添加一个片段。您需要处理Fragment类中的按钮,更重要的是,您需要将Fragment添加到Activity中。

ActivityOnCreate中,在设置导航抽屉后):

Fragment newFragment = new ExampleFragment(); // replace ExampleFragment by your Fragment's class name
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(CONTENT_VIEW_ID, newFragment).commit(); // CONTENT_VIEW_ID is the id of the View in your Activity that should contain the Fragment.

然后在Fragment中,将其移至onActivityCreated

btnTest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
});

您需要在R.layout.fragment_main的{​​{1}}中充气onCreateView,并从Fragment充气中获取对btnTest的引用。