创建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 中的视图具有相同布局的表?