1

当Android Studio中运行我的应用程序获得了NullPointerException在线路30是这样的:NullPointerException异常:SetOnClickListener(这个) - Android电子

llTheory.setOnClickListener(this); 

这一直为我工作..我实现View.OnClickListener和有覆盖方法在这里:

LinearLayout llTheory = (LinearLayout) findViewById(R.id.llTheory); 
0123:

@Override 
public void onClick(View v) { 
    .... 
} 

我的LinearLayout的setOnClickListener这里之前声明

那么是怎么回事?这是我的logcat输出:

10-20 21:09:24.045 14625-14625/com.timmo.applauncher E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.timmo.applauncher, PID: 14625 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.timmo.applauncher/com.timmo.timmoapplauncher.Main}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5153) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.timmo.timmoapplauncher.Main.Init(Main.java:30) 
      at com.timmo.timmoapplauncher.Main.onCreate(Main.java:78) 
      at android.app.Activity.performCreate(Activity.java:5312) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5153) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

你在使用片段吗? – SeahawksRdaBest 2014-10-20 20:32:29

+0

是@SeahawksRdaBest第一次,所以我可能做错了 – Timmo 2014-10-20 20:36:01

+0

是你的布局可点击属性设置为true在你的xml文件 – vembutech 2014-10-20 20:37:36

回答

1

片段的工作有点不同。

你必须在处理它们时使用rootview的概念。否则,你会发现自己总会碰到可怕的“NULL POINTER”异常。

以下是如何去做。

定义rootview,当你膨胀每个片段的每个视图,然后调用onClick功能。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View rootview = inflater.inflate(R.layout.xml_you_want_to_inflate, container,false);   
    // Now call rootview and the onclick fuction, presumably for a list or button 
    rootview.findViewById(R.id.your_button/list_id_here).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     // Do stuff. 
     } 
    }); 

另一种替代方法是使用getView,它总是返回rootview。试试这个代替

LinearLayout llTheory = (LinearLayout) getView().findViewById(R.id.llTheory); 

这个link解释了类似的问题。

但是,前一种方式是正确的方式,因为您可以将片段彼此隔离并正确理解视图层次结构。我会读this。请相信我,投资阅读这些东西是值得的,然后花费你花费的时间,否则用半智慧的黑客工作思路去做一些工作。

+0

感谢您的信息。我肯定要阅读碎片感谢。 – Timmo 2014-10-20 21:56:02

0

你有

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_with_R_id_llTheory); 
... 
在您的活动

?您的活动(或由活动托管的片段)必须具有R.id.llTheory的布局。

相关问题