创建fragment的视图后有啥方法吗?创建fragment后如何改变tab的布局

Posted

技术标签:

【中文标题】创建fragment的视图后有啥方法吗?创建fragment后如何改变tab的布局【英文标题】:Is there any method after creating the view of fragments?How to change Layout of tabs after creating fragments创建fragment的视图后有什么方法吗?创建fragment后如何改变tab的布局 【发布时间】:2018-10-21 11:46:06 【问题描述】:

我需要调用一个方法来解析 JSON 对象并设置我在 TextFields 中设置值和按钮值的值,我创建了片段,但是在创建片段之后我将如何更改文本字段值

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));

        //Switch to different layout accordingly
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        
            case 1: 
                rootView = inflater.inflate(R.layout.fragment_main, container, false);
                break;
            
            case 2: 
                rootView = inflater.inflate(R.layout.fragment_receipt, container, false);
                break;
            

            case 3: 
                rootView = inflater.inflate(R.layout.fragment_totals, container, false);
                break;
            
            case 4: 
                rootView = inflater.inflate(R.layout.fragment_keyboard, container, false);
                break;
            
            case 5: 
                rootView = inflater.inflate(R.layout.fragment_keylock, container, false);
                break;
            

        
        return rootView;
    

我尝试在onStart 中调用该方法,但在onCreateView 之前首先调用了 onStart 方法,因此在分配值时出现空指针异常:

@Override
  public void onStart() 
    super.onStart();
    parseJsonResponse(response_message);
  

在 parseJsonResponse() 方法中,我设置了值

String UIFooter = ResponseHeaderObject.getString("FOOTER");
//Set Header Display
headerTextView =(TextView) findViewById(R.id.headerTextView);
headerTextView.setText(UIHeader);

这是来自 logcat 的错误:

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.mpos.kits.smartpos.PosMainActivity.parseJsonResponse(PosMainActivity.java:366)

【问题讨论】:

在片段中确实有一个名为onViewCreated 的方法。如果你只用谷歌搜索你的问题的标题,你就会找到它。 Difference between onCreateView and onViewCreated in Fragment的可能重复 【参考方案1】:

片段有一个名为:onViewCreated 的函数,它在您的视图创建后调用

【讨论】:

【参考方案2】:

是的,该方法存在:onViewCreated。但是,如果您想在创建它的方法之外将文本分配给TextView,则必须将TextView 声明为成员属性(在任何方法之外),以允许所有类方法使用它.否则,在一个片段内,将很难对其进行操作。

原因:java.lang.NullPointerException:尝试在 com.mpos.kits.smartpos.PosMainActivity 的空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”。 parseJsonResponse(PosMainActivity.java:366)

您收到此错误是因为此headerTextView =(TextView) findViewById(R.id.headerTextView); 在您的片段中返回null,除非它像onCreateView 方法中那样引用根视图。这样(TextView) rootView.findViewById(R.id.section_label);

如果你想覆盖onViewCreated 方法,这样做:

@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 

        super.onViewCreated(view, savedInstanceState);

        //your code
    

【讨论】:

我尝试使用 @Override public View onViewCreated(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) parseJsonResponse(response_message);但是这个投诉方法不会覆盖超类方法你能告诉我一个调用这个 onViewCreated() 方法的例子吗 我编辑了答案以添加onViewCreated方法 好吧,我做到了,但现在我的方法不能被调用 @Override public void onViewCreated(View v, Bundle savedInstanceState) super.onViewCreated(v, savedInstanceState); parseJsonResponse(response_message);它给我错误 non static field cannot be referenced from a static context android parseJsonResponse() 在我的 Activity 类中,我无法将其更改为静态方法 public void parseJsonResponse(String jsonResponse)// 解析响应以及 textview 和按钮我根据解析值更改的值 @JerryAbraham,你能在onCreateView 方法之前声明你的变量吗?正如我在答案中所述 是的,我这样做了,现在我的问题是,当我从一个选项卡移动到另一个 parseJsonResponse() 被调用时,我想更新选项卡的所有布局,无论我在哪个选项卡中,这是可能吗?我有 3 到 4 个不同布局的选项卡我想更新所有选项卡,无论显示哪个选项卡。请检查此***.com/questions/52927163/…

以上是关于创建fragment的视图后有啥方法吗?创建fragment后如何改变tab的布局的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在 SwiftUI 中使用 @ViewBuilder 创建/提取视图数组

有啥方法可以创建与 SQL Server 2005 中的视图具有相同布局的表?

物化视图与表格:有啥优势?

在android中使用fragment和frameLayout有啥区别?两者可以互换使用吗?

测距后有啥方法可以使用核心蓝牙连接信标

在 MySQL 中提交后有啥方法可以回滚吗?