我是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) {
}
});
}
我知道其他人已经解决了这个问题并解决了它,但我无法解决我的问题,请帮助,谢谢
答案 0 :(得分:0)
没有Logcat我会说你的问题是以下之一:
btnTest
未在您的ActivityLayout(activity_main)中定义。如果是这种情况,请检查您的XML。
btnTest
是否在Fragment
内?如果是这样,您应该将OnClickListener
放在Fragment
班级而不是Activity
班级。
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中。
在Activity
(OnCreate
中,在设置导航抽屉后):
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
的引用。