我有一个扩展DialogFragment的片段,还有一个定制的布局,其中包含三个EditTexts和两个按钮--保存和取消。我的对话框显示得很好,使用onCreateView方法来指定布局,但是当我实现setOnclickListener时,我的应用程序就会崩溃。这可能有一个简单的解决方案,但我已经被困了几个小时了。我将非常感谢一个建议或示例代码。
下面是DialogFragment的代码
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class UpdateGrade extends DialogFragment{
private Button cancelBtn;
@SuppressLint("SimpleDateFormat")
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.update_grade_layout, container);
cancelBtn = (Button) view.findViewById(R.id.cancelBtn);
EditText dateField = (EditText) view.findViewById(R.id.dateField);
Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = df.format(c.getTime());
dateField.setText(formattedDate);
cancelBtn.setOnClickListener(new View.OnClickListener() { //LINE 28
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
return view;
}
}下面是我呼吁DialogFragment出现的地方
@Override
public void onItemClick(AdapterView<?> a, View v, int i, long l) {
// TODO Auto-generated method stub
@SuppressWarnings("unchecked")
HashMap<String, String> selected_row = (HashMap<String, String>) simpleAdapter.getItem(i);
String selectedGrade=selected_row.get("grade_id");
FragmentManager fm = getFragmentManager();
UpdateGrade d = new UpdateGrade();
d.show(fm, "update_grade_layout");
}这是LogCat的详细信息
11-17 02:09:56.758: E/AndroidRuntime(778): FATAL EXCEPTION: main
11-17 02:09:56.758: E/AndroidRuntime(778): java.lang.NullPointerException
11-17 02:09:56.758: E/AndroidRuntime(778): at com.feufern.apms.UpdateGrade.onCreateView(UpdateGrade.java:28)
11-17 02:09:56.758: E/AndroidRuntime(778): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:795)
11-17 02:09:56.758: E/AndroidRuntime(778): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:998)
11-17 02:09:56.758: E/AndroidRuntime(778): at android.app.BackStackRecord.run(BackStackRecord.java:622)
11-17 02:09:56.758: E/AndroidRuntime(778): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1330)
11-17 02:09:56.758: E/AndroidRuntime(778): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:417)发布于 2013-11-16 18:34:45
您正在尝试添加一个侦听器:
cancelBtn.setOnClickListener(new View.OnClickListener() { // ...到cancelBtn,但它是null。
您应该检查您拥有的xml文件,因为:
cancelBtn = (Button) view.findViewById(R.id.cancelBtn);可能会有问题。这通常是一个布局问题,因此正如其他人指出的那样,请仔细检查布局文件。
作为调试NullPointerExceptions的一般经验规则:
你总是会看到你在哪条线上得到了NPE。您只需调试程序并在该行上设置断点即可。通过这种方式,您可以轻松地检查哪个引用是null。在您的情况下,您必须在第28行中断并检查引用。
https://stackoverflow.com/questions/20022047
复制相似问题