【问题标题】:Attempt to invoke virtual method on a null object reference [duplicate]尝试在空对象引用上调用虚拟方法 [重复]
【发布时间】:2023-03-25 16:58:02
【问题描述】:

我尝试从 Activity 调用 Fragment 方法。需要从活动中设置文本 t1..t6(在 fragment.xml 中)。所以有错误

致命异常:java.lang.NullPointerException:尝试调用 null 上的虚拟方法“void PageFragment.setTime(java.lang.String)” 对象引用。

PageFragment.java

公共类 PageFragment 扩展 Fragment {

        static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
        TextView t1,t2,t3,t4,t5,t6;
        int pageNumber;

        static PageFragment newInstance(int page) {
            PageFragment pageFragment = new PageFragment();
            Bundle arguments = new Bundle();
            arguments.putInt(ARGUMENT_PAGE_NUMBER, page);

            pageFragment.setArguments(arguments);
            return pageFragment;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);   
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment, null);
            t1=(TextView)view.findViewById(R.id.t1);
            t2=(TextView)view.findViewById(R.id.t2);
            t3=(TextView)view.findViewById(R.id.t3);
            t4=(TextView)view.findViewById(R.id.t4);
            t5=(TextView)view.findViewById(R.id.t5);
            t6=(TextView)view.findViewById(R.id.t6);
            return view;
        }

        public void setTime(String a){
            t1.setText(a);
        }
    }

Schedule.java

FragmentManager fm = getSupportFragmentManager();
PageFragment fragment =(PageFragment)fm.findFragmentById(R.id.RelativeLayout1);
fragment.setTime((input1.getText().toString()));

【问题讨论】:

  • 你的班级正在扩展 Fragment。不需要onCreate 方法。
  • 你能发布完整的 Schedule.java 吗?

标签: android nullpointerexception fragment


【解决方案1】:

您尝试将数据传递给片段的方式是错误的。这是正确的方式

Schedule.java

 Bundle bundle = new Bundle();
 bundle.putString("arg_page_number", input1.getText().toString());
 // set Fragmentclass Arguments
 PageFragment fragobj = new PageFragment();
 fragobj.setArguments(bundle);

PageFragment.java

在片段onCreateView方法内接收数据

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment, null);
     pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER,0);
     t1=(TextView)view.findViewById(R.id.t1);
     t2=(TextView)view.findViewById(R.id.t2);
               .......           
    return view;
   }

再次,您正在将您的课程扩展到 Fragment。不需要OnCreate 方法。

【讨论】:

  • public void setTime(String a){ t1.setText(a);这个方法不行,需要设置文本t1
  • 你能解释一下你想要达到的目标吗?
  • 为什么需要这条线fragment.setTime((input1.getText().toString()));?传递给片段?
  • 所以我需要从活动初始化 t1..t6(TextView),但仍然不能这样做。是的,我想我需要传递给片段。
  • 感谢您的支持,但我的问题还是没有解决(
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2016-07-30
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多