首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onClickListener on DialogFragment

onClickListener on DialogFragment
EN

Stack Overflow用户
提问于 2013-11-16 18:23:04
回答 1查看 208关注 0票数 0

我有一个扩展DialogFragment的片段,还有一个定制的布局,其中包含三个EditTexts和两个按钮--保存和取消。我的对话框显示得很好,使用onCreateView方法来指定布局,但是当我实现setOnclickListener时,我的应用程序就会崩溃。这可能有一个简单的解决方案,但我已经被困了几个小时了。我将非常感谢一个建议或示例代码。

下面是DialogFragment的代码

代码语言:javascript
复制
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出现的地方

代码语言:javascript
复制
        @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的详细信息

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-16 18:34:45

您正在尝试添加一个侦听器:

代码语言:javascript
复制
cancelBtn.setOnClickListener(new View.OnClickListener() {  // ...

cancelBtn,但它是null

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

代码语言:javascript
复制
cancelBtn = (Button) view.findViewById(R.id.cancelBtn);

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

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

你总是会看到你在哪条线上得到了NPE。您只需调试程序并在该行上设置断点即可。通过这种方式,您可以轻松地检查哪个引用是null。在您的情况下,您必须在第28行中断并检查引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20022047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档