繁体   English   中英

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

[英]Inflate view from Resource layout after on click event

我是Android开发的新手,有些想法让我难以理解。

我想要实现的是,当单击按钮时,视图会膨胀为R.id.resultsBoxLinearLayout 我认为我要做的事情背后的想法是:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM