我对Android开发相对较新,并且有一些想法让我无法理解。
我想要实现的是,当点击一个按钮时,视图会膨胀到LinearLayout
R.id.resultsBox
。我认为我必须做的事情背后的想法是:
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"
。我以为我正确地夸大了视图,但显然不是因为应用程序崩溃了。
我假设我的错误与从FindClassFragment
类到new View.OnClickListener()
子类的继承有关,但我不确定究竟是什么。 / p>
我尝试在课程范围内定义所有内容,但这不起作用......我迷路了。
对正确方向的有益提示非常感谢!
编辑:不担心变量空指针异常,我担心让视图正确膨胀。
我得到的错误日志是:
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);
答案 0 :(得分:1)
在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);
答案 1 :(得分:0)
在第67行,您所指的视图是search_button。正在点击的视图。
显然它无法转换为ViewGroup ...