[英]Inflate view from Resource layout after on click event
我是Android开发的新手,有些想法让我难以理解。
我想要实现的是,当单击按钮时,视图会膨胀为R.id.resultsBox
的LinearLayout
。 我认为我要做的事情背后的想法是:
public class FindClassFragment extends Fragment {
private Button search_button;
private EditText course_abbrev_field;
private EditText course_num_field;
private Spinner semester_spinner;
private String course_abbrev;
private String course_num;
private String semester;
private ArrayList<String[]> sectionsList;
private LinearLayout resultsBox;
private WebScraper scraper;
public FindClassFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_findclass, container, false);
resultsBox = (LinearLayout) rootView.findViewById(R.id.resultsView);
RelativeLayout f = (RelativeLayout) inflater.inflate(R.layout.fragment_section, null);
search_button = (Button) rootView.findViewById(R.id.search_button);
course_abbrev_field = (EditText) rootView.findViewById(R.id.course_abbrev);
course_num_field = (EditText) rootView.findViewById(R.id.course_num);
assert search_button != null;
search_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("CLICK");
if(true) {
resultsBox.removeAllViews();
LinearLayout l = (LinearLayout) view.inflate(getActivity(), R.layout.error, (ViewGroup) view);
resultsBox.addView(l);
} else {
resultsBox.removeAllViews();
}
}
});
return rootView;
}
}
我想出了如何使click事件起作用。 "CLICK"
日志时, "CLICK"
被打印到日志中。 我以为我可以正确放大视图,但显然不是因为应用程序崩溃了。
我假设我的错误与从FindClassFragment
类到new View.OnClickListener()
子类的继承有关,但我不确定到底是什么 。
我试图定义该类范围内的所有内容,但是那没有用……我迷路了。
朝着正确方向提供的有用提示不胜感激!
编辑:不担心变量空指针异常,我担心使视图正确膨胀。
我得到的错误日志是:
java.lang.ClassCastException: android.widget.Button cannot be cast to android.view.ViewGroup
at github.m_porter.fragments.FindClassFragment$1.onClick(FindClassFragment.java:72)
at android.view.View.performClick(View.java:4354)
at android.view.View$PerformClick.run(View.java:17967)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5329)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
对于那些不喜欢计数的人,第67行是LinearLayout l = (LinearLayout) view.inflate(getActivity(), R.layout.error, (ViewGroup) view);
在FindClassFragment类的onClick()的第67行上,给出了NullPointer异常。
放置断点并首先检查哪个对象/变量为空,然后尝试一下。
编辑:找不到代码中初始化的semester_spinner。 在使用前对其进行初始化。
编辑:
像这样使用:
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = layoutInflater.inflate(R.layout.error,null);
resultsBox.addView(layout);
在第67行,您要引用的视图是search_button。 被单击的视图。
显然不能将其强制转换为ViewGroup ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.