【问题标题】:Checkbox's isChecked getting NullPointerException复选框的 isChecked 获取 NullPointerException
【发布时间】:2016-03-20 02:38:04
【问题描述】:

我有一个包含 6 个片段的活动(已禁用滑动)。对于每个片段,我有 2 个按钮(下一个和上一个),它们完美地移动到下一个和上一个片段。我有 2 个复选框,在迁移到下一个活动之前,我需要检查它们是否被选中。但是我得到空指针,因为在 onCreateView 方法中初始化了复选框,但是由于 viewpager 已经加载了片段。如何检查复选框是否被选中?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.fragment_step6, container, false);
    cb1  = (CheckBox)v.findViewById(R.id.cb1);
    next = (Button)v.findViewById(R.id.next);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(cb1.isChecked())
            return true;
        }
    });
}

【问题讨论】:

  • 你能发布一些你已经实现的代码吗!
  • 问题是视图寻呼机在用户到达之前加载了片段。所以现在当用户点击下一个按钮时,cb1 给出了 NPE。
  • 好的,那么什么是 null?
  • 这是我得到的错误:尝试在空对象引用上调用虚拟方法'boolean android.widget.CheckBox.isChecked()'
  • 所以cb1 is null,所以v.findViewById(R.id.cb1) 返回null,所以最后@cstew 是对的......或者你没有在问题中提供你的真实代码......

标签: android android-fragments checkbox


【解决方案1】:

ViewPager 将为您预加载片段,并且不会立即从内存中删除旧片段。我不认为问题是当用户单击下一个按钮时视图消失了。

检查您的布局文件并确保您在res/layout/fragment_step6.xml 中有一个ID 为cb1 的复选框。

【讨论】:

  • 它会在您开始向左/向右滑动时立即执行。最好的情况是使用setOffscreenPageLimit()
  • ViewPager 无关紧要,这个答案的第二部分是关键
  • 是的,我已经在xml中定义了这个id的复选框。
【解决方案2】:
pager.setOffscreenPageLimit(6);//6 =  to the number you included in your question.

这将告诉viewpager 在滚动页面时保留您的fragments,这样您就不会丢失您的状态。

【讨论】:

  • 我已禁用滑动。这两个按钮用于导航到下一个和上一个片段
  • 当您单击下一步或向右时,您实际上是在滑动。嗯是的!。您正在滚动到下一个/上一个。
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
相关资源
最近更新 更多