Android 点击碎片中的按钮时出现NPE,然后应用程序崩溃
我正在从我的一个活动调用fragment,并且在fragment中有登录按钮。当我点击按钮的时候,它给了我NPE。我尝试了所有的排列和组合,使它工作。这是我的密码Android 点击碎片中的按钮时出现NPE,然后应用程序崩溃,android,android-fragments,android-button,Android,Android Fragments,Android Button,我正在从我的一个活动调用fragment,并且在fragment中有登录按钮。当我点击按钮的时候,它给了我NPE。我尝试了所有的排列和组合,使它工作。这是我的密码 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); setUs
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUserVisibleHint(true);
View rootView = inflater.inflate(R.layout.fragment1, container, false);
Button button = (Button) rootView.findViewById(R.id.bt_login);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// Perform action on click
EditText userName = (EditText)v.findViewById(R.id.userName);
String user_Name = userName.getText().toString();
EditText password = (EditText)v.findViewById(R.id.password);
String user_Password = password.getText().toString();
if(user_Name.length()== 0 || user_Password.length()== 0)
{
Toast.makeText(getActivity(), "Please enter correct information", Toast.LENGTH_LONG).show();
//Toast.makeText(this,"Please enter correct information",Toast.LENGTH_LONG).show();
return;
}
loginAction(user_Name,user_Password);
}
});
return rootView;
}
堆栈跟踪
07-11 11:50:02.536: E/AndroidRuntime(429): FATAL EXCEPTION: main
07-11 11:50:02.536: E/AndroidRuntime(429): java.lang.NullPointerException
07-11 11:50:02.536: E/AndroidRuntime(429): at com.androidbegin.sidemenututorial.Fragment1$1.onClick(Fragment1.java:46)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.view.View.performClick(View.java:2408)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.view.View$PerformClick.run(View.java:8816)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.os.Handler.handleCallback(Handler.java:587)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.os.Looper.loop(Looper.java:123)
07-11 11:50:02.536: E/AndroidRuntime(429): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-11 11:50:02.536: E/AndroidRuntime(429): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 11:50:02.536: E/AndroidRuntime(429): at java.lang.reflect.Method.invoke(Method.java:521)
07-11 11:50:02.536: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-11 11:50:02.536: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-11 11:50:02.536: E/AndroidRuntime(429): at dalvik.system.NativeStart.main(Native Method)
您应该使用rootView来扩大视图
EditText userName = (EditText)rootView.findViewById(R.id.userName);
视图
v
是您单击的单个视图,而不是布局,因此您不应该调用v.findViewById(…)
。试一试
EditText userName = (EditText)findViewById(R.id.userName);
String user_Name = userName.getText().toString();
EditText password = (EditText)findViewById(R.id.password);
您应该使用视图对象(rootview)来初始化视图
EditText userName,password; // delcare variables as class member.
View rootView = inflater.inflate(R.layout.fragment1, container, false);
userName = (EditText)rootview.findViewById(R.id.userName);
password = (EditText)rootview.findViewById(R.id.password);
此外,也不需要每次单击按钮时初始化视图
将初始化按钮移到外部,然后单击