2013-02-28 65 views
4

我有此代码部的内侧为一个dialogfragment设置onclicklistener上的按钮DialogFragment

public class DialogOne extends DialogFragment { 
private Button b; 

public DialogOne() {} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dialog_one, container); 
    getDialog().setTitle("Titolo del dialog"); 
    b = (Button)getDialog().findViewById(R.button.ok); 
    b.setOnclickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        getDialog().dismiss(); 
       } 
      }); 

    return view; 
} 

因此,当我按下按钮,dialogfragment必须关闭。当我运行的应用程序,我有一个NullPoinerException行上包含新的OnClickListener。 我该如何解决它?

> 02-28 21:05:44.623: E/AndroidRuntime(8487): FATAL EXCEPTION: main 
02-28 21:05:44.623: E/AndroidRuntime(8487): java.lang.NullPointerException 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at com.example.dialogs.DialogOne.onActivityCreated(DialogOne.java:37) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.os.Handler.handleCallback(Handler.java:725) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.os.Looper.loop(Looper.java:137) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-28 21:05:44.623: E/AndroidRuntime(8487):  at dalvik.system.NativeStart.main(Native Method) 
+0

可以粘贴完整的堆栈跟踪? – 2013-02-28 20:01:20

+0

粘贴堆栈跟踪 – giozh 2013-02-28 20:07:07

回答

8

我想你想更换

b = (Button)getDialog().findViewById(R.button.ok);

b = (Button) view.findViewById(R.button.ok);

+0

我没有一个视图,让这个类! – giozh 2013-02-28 20:05:34

+1

是的,你在这里: '查看视图= inflater.inflate(R.layout.dialog_one,容器);' 由于该视图是你的对话框布局膨胀的结果,你想要调用'findViewById'它。 – 2013-02-28 20:07:00

+0

将对话框视图层次结构充填到变量视图中。 getDialog()不会返回您认为它的作用。 – 2013-02-28 20:08:11