2012-08-01 51 views
0

我點擊了菜單項後調用了以下函數。基本上我有一些字符串,我嘗試設置爲位於AlertDialog內的TextView。EditText上的setText因NullPointerException而失敗

public void createAboutDialog() { 
    View layout = mContext.getSystemService(LAYOUT_INFLATER_SERVICE).inflate(R.layout.about, null); 

    TextView tv = (TextView) findViewById(R.id.myTextView); 
    tv.setText("My text here"); 

    AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
    builder.setView(layout); 

    AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 
} 

此問題似乎與撥打setText()有關。

logcat的

08-01 14:19:33.423: D/MainActivity(1793): 1.0 
08-01 14:19:33.473: D/AndroidRuntime(1793): Shutting down VM 
08-01 14:19:33.473: W/dalvikvm(1793): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 
08-01 14:19:33.603: E/AndroidRuntime(1793): FATAL EXCEPTION: main 
08-01 14:19:33.603: E/AndroidRuntime(1793): java.lang.NullPointerException 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.example.your.chinese.name.MainActivity.createAboutDialog(MainActivity.java:105) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.example.your.chinese.name.MainActivity.onOptionsItemSelected(MainActivity.java:74) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.app.Activity.onMenuItemSelected(Activity.java:2502) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:969) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:163) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.widget.AbsListView.performItemClick(AbsListView.java:1065) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2522) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.widget.AbsListView.onTouchEvent(AbsListView.java:3195) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.View.dispatchTouchEvent(View.java:5564) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2052) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1813) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2058) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1827) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1879) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.View.dispatchPointerEvent(View.java:5766) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.os.Looper.loop(Looper.java:137) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at android.app.ActivityThread.main(ActivityThread.java:4441) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-01 14:19:33.603: E/AndroidRuntime(1793):  at dalvik.system.NativeStart.main(Native Method) 
08-01 14:19:35.583: I/Process(1793): Sending signal. PID: 1793 SIG: 9 

回答

8

你需要調用findViewById()從正確的方面:

TextView tvVersion = (TextView) layout.findViewById(R.id.tvAboutdialogVersion); 

如果沒有提供,它將從活動方面,它加載了主XML被稱爲視圖,並且它沒有訪問/引用您剛膨脹的對話框的XML(及其TextViews)。

+0

謝謝!這工作。你是救生員。 – 2012-08-01 11:31:09

+1

不要忘了儘可能地接受答案。 – nhaarman 2012-08-01 11:36:44

+1

它真的很棒。我也試過更多..但總是顯示空指針異常。但是,這個單詞layout.find ...非常有趣...從我身邊投了一票..謝謝。 – 2013-03-13 14:05:32

1

試試這個:

TextView tvVersion = (TextView) alertDialog.findViewById(R.id.tvAboutdialogVersion);

相反的:

TextView tvVersion = (TextView) findViewById(R.id.tvAboutdialogVersion);

相關問題