Android setOnClickListener 使我的应用程序在 avd 上崩溃
Android setOnClickListener crashes my app on avd
我是 android 开发新手,我使用 NavigationDrawer
activity 创建了一个新项目,我使用 Android Studio。问题是当我添加一个按钮并创建 OnClickListener 时,应用程序崩溃了,但没有它,它可以正常启动。请看下面我的代码。
我尝试添加 setContentView(View) 但没有帮助
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) {
}
});
}
我知道其他人遇到过这些问题并解决了,但我的解决不了,请帮忙,谢谢
没有Logcat我会说你的问题是以下之一:
btnTest
未在您的 ActivityLayout (activity_main) 中定义。如果是这种情况,请检查您的 XML。
你的btnTest
在你的Fragment
里面吗?如果是这样,你应该把 OnClickListener
放在你的 Fragment
class 而不是你的 Activity
class.
顺便说一句,第二个 setContentView
没有任何意义,你应该只使用一个。
希望对您有所帮助
setContentView(R.layout.activity_main); //comes by default
setContentView(R.layout.fragment_main); //added by me, but doesnt help
不要调用 setContentView
两次。 "comes by default"是为了方便IDE在生成Activity
class的时候提供的,如果不需要就删掉。
其次,您将 Activity
的片段布局设置为 View
。因此,除非 R.id.btnTest
包含在该布局中,否则 btnTest
将为空,因此在调用 setOnClickListener
.
时会导致 NullPointerException
删除这个:
setContentView(R.layout.fragment_main);
这里
setContentView(R.layout.activity_main);
确保您的 Activity
有一个名为 activity_main.xml
的布局文件,或者将该引用替换为您的布局文件的名称。
EDIT :我猜你选择了 AS 中的选项来在你的 Activity 中生成一个占位符和一个要添加到它的片段。您需要处理 Fragment class 中的按钮,更重要的是,您需要将 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) {
}
});
您将需要在 Fragment
中将 R.layout.fragment_main
inflate onCreateView
,并从您 inflate 的 View
中获取对 btnTest
的引用。
我是 android 开发新手,我使用 NavigationDrawer
activity 创建了一个新项目,我使用 Android Studio。问题是当我添加一个按钮并创建 OnClickListener 时,应用程序崩溃了,但没有它,它可以正常启动。请看下面我的代码。
我尝试添加 setContentView(View) 但没有帮助
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) {
}
});
}
我知道其他人遇到过这些问题并解决了,但我的解决不了,请帮忙,谢谢
没有Logcat我会说你的问题是以下之一:
btnTest
未在您的 ActivityLayout (activity_main) 中定义。如果是这种情况,请检查您的 XML。你的
btnTest
在你的Fragment
里面吗?如果是这样,你应该把OnClickListener
放在你的Fragment
class 而不是你的Activity
class.
顺便说一句,第二个 setContentView
没有任何意义,你应该只使用一个。
希望对您有所帮助
setContentView(R.layout.activity_main); //comes by default
setContentView(R.layout.fragment_main); //added by me, but doesnt help
不要调用 setContentView
两次。 "comes by default"是为了方便IDE在生成Activity
class的时候提供的,如果不需要就删掉。
其次,您将 Activity
的片段布局设置为 View
。因此,除非 R.id.btnTest
包含在该布局中,否则 btnTest
将为空,因此在调用 setOnClickListener
.
NullPointerException
删除这个:
setContentView(R.layout.fragment_main);
这里
setContentView(R.layout.activity_main);
确保您的 Activity
有一个名为 activity_main.xml
的布局文件,或者将该引用替换为您的布局文件的名称。
EDIT :我猜你选择了 AS 中的选项来在你的 Activity 中生成一个占位符和一个要添加到它的片段。您需要处理 Fragment class 中的按钮,更重要的是,您需要将 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) {
}
});
您将需要在 Fragment
中将 R.layout.fragment_main
inflate onCreateView
,并从您 inflate 的 View
中获取对 btnTest
的引用。