【问题标题】:onClickListener on DialogFragmentDialogFragment 上的 onClickListener
【发布时间】:2013-11-17 02:34:45
【问题描述】:

我有一个扩展 DialogFragment 的片段,我有一个自定义布局,其中包含三个 EditText 和两个按钮 - 保存和取消。我的对话框显示得很好,使用 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)

【问题讨论】:

  • 第 28 行是什么UpdateGrade.java
  • 我再次同意 Raghunandan :D 请在上述文件的第 28 行插入评论
  • @koneko 是第 28 行吗?确定??
  • 第 28 行:cancelBtn.setOnClickListener(new View.OnClickListener()){
  • @koneko cancelBtn 为空。检查xml中的id update_grade_layout

标签: java android


【解决方案1】:

您正在尝试添加监听器:

cancelBtn.setOnClickListener(new View.OnClickListener() {  // ...

cancelBtn,但它是null

您应该检查您拥有的 xml 文件,因为:

cancelBtn = (Button) view.findViewById(R.id.cancelBtn);

可能有问题。 这通常是一个布局问题,因此其他人指出请仔细检查您的布局文件。

作为调试NullPointerExceptions 的一般经验法则:

您将始终看到您在哪一行获得 NPE。您只需调试程序并在该行设置断点。这样您就可以轻松检查哪个引用是null。在您的情况下,您必须在第 28 行中断并检查引用。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多