
我从中学习
http://developer.androID.com/reference/androID/Widget/button.HTML“而不是将OnClickListener应用于活动中的按钮,您可以使用androID:onClick属性为XML布局中的按钮指定方法.”
但是,我只能用XML方法完成它,我的监听器方法由以下指定,导致应用程序崩溃.
在我的fragment_main.xml中:
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:paddingBottom="@dimen/activity_vertical_margin" androID:paddingleft="@dimen/activity_horizontal_margin" androID:paddingRight="@dimen/activity_horizontal_margin" androID:paddingtop="@dimen/activity_vertical_margin" tools:context="com.example.myapp.MainActivity$PlaceholderFragment" > <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="@string/hello_world" /> <button androID:ID="@+ID/try_button" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text = "Trybutton" androID:onClick="onClick" /></relativeLayout>在我的activity_main.xml中:
<FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context="com.example.myapp.MainActivity" tools:ignore="MergeRootFrame"></FrameLayout>在我的MainActivity.java中:
public class MainActivity extends Activity implements OnClickListener{@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.ID.container, new PlaceholderFragment()).commit(); } button button = (button)findVIEwByID(R.ID.try_button); button.setonClickListener(this);}public voID onClick(VIEw v) { Toast.makeText(getApplicationContext(), "I'm clicked!", Toast.LENGTH_SHORT).show();;}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroIDManifest.xml. int ID = item.getItemID(); if (ID == R.ID.action_settings) { return true; } return super.onoptionsItemSelected(item);}/** * A placeholder fragment containing a simple vIEw. */public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw rootVIEw = inflater.inflate(R.layout.fragment_main, container, false); return rootVIEw; }}}
LogCat说:
05-20 19:56:17.604: E/MoreInfoHPW_VIEwGroup(566): Parent vIEw is not a TextVIEw05-20 19:56:17.649: D/AndroIDRuntime(566): Shutting down VM05-20 19:56:17.649: W/dalvikvm(566): threadID=1: thread exiting with uncaught exception (group=0x4194ec08)05-20 19:56:17.654: E/AndroIDRuntime(566): FATAL EXCEPTION: main05-20 19:56:17.654: E/AndroIDRuntime(566): Process: com.example.myapp, PID: 56605-20 19:56:17.654: E/AndroIDRuntime(566): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}: java.lang.NullPointerException05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2328)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread.access0(ActivityThread.java:169)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.os.Handler.dispatchMessage(Handler.java:102)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.os.Looper.loop(Looper.java:136)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread.main(ActivityThread.java:5476)05-20 19:56:17.654: E/AndroIDRuntime(566): at java.lang.reflect.Method.invokeNative(Native Method)05-20 19:56:17.654: E/AndroIDRuntime(566): at java.lang.reflect.Method.invoke(Method.java:515)05-20 19:56:17.654: E/AndroIDRuntime(566): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)05-20 19:56:17.654: E/AndroIDRuntime(566): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1084)05-20 19:56:17.654: E/AndroIDRuntime(566): at dalvik.system.NativeStart.main(Native Method)05-20 19:56:17.654: E/AndroIDRuntime(566): Caused by: java.lang.NullPointerException05-20 19:56:17.654: E/AndroIDRuntime(566): at com.example.myapp.MainActivity.onCreate(MainActivity.java:29)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.Activity.performCreate(Activity.java:5473)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)05-20 19:56:17.654: E/AndroIDRuntime(566): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2292)05-20 19:56:17.654: E/AndroIDRuntime(566): ... 11 more我在windows 7上使用最新的Eclipse ADT v22.6.2,在Samsung galaxy Note 10.1 2014上运行.
我的代码出了什么问题?
解决方法:
试试这个:
public class MainActivity extends Activity {@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.ID.container, new PlaceholderFragment()).commit(); } //button button = (button)findVIEwByID(R.ID.try_button); //button.setonClickListener(this);}/**public voID onClick(VIEw v) {}*/@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroIDManifest.xml. int ID = item.getItemID(); if (ID == R.ID.action_settings) { return true; } return super.onoptionsItemSelected(item);}/** * A placeholder fragment containing a simple vIEw. */public static class PlaceholderFragment extends Fragment implements OnClickListener {public PlaceholderFragment() {}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw rootVIEw = inflater.inflate(R.layout.fragment_main, container, false); button button = (button) rootVIEw.findVIEwByID(R.ID.try_button); button.setonClickListener(this); return rootVIEw;}@OverrIDepublic voID onClick(VIEw v) { // Todo auto-generated method stub Toast.makeText(getActivity(), "I'm clicked!", Toast.LENGTH_SHORT).show();}}} 总结 以上是内存溢出为你收集整理的java – 如何在Android上实现OnClickListener全部内容,希望文章能够帮你解决java – 如何在Android上实现OnClickListener所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)