单击事件后,从资源布局中扩充视图

时间:2014-01-17 06:14:24

标签: java android onclicklistener layout-inflater

我对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);

2 个答案:

答案 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 ...