Xml按钮字段值始终为null

时间:2017-07-18 17:36:49

标签: java android xml button fragment

我搜索了很多线程,但无法理解我的代码中的问题。我试图在片段的按钮上添加setOnClickListener功能。它给了我

  allNews.setOnClickListener上的

nullpointer异常(new View.OnClickListener()。

调试后,我知道变量allNews为空。

下面是我的布局代码。

<LinearLayout
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <Button
            android:id = "@+id/b_all"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:gravity="center"
            android:text="All \n news"
            android:textColor="#FFF"
            android:textSize="15sp"
            android:background="@drawable/button_bg_round"
            android:padding="5dp"
            android:textAllCaps="false"


            />

这是我的java代码:

public class CategoriesFragment extends Fragment {

    public Button allNews;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

          View rootView = inflater.inflate(R.layout.activity_news_menu, container, false);
        getActivity().setTitle("Play");

        allNews = (Button) rootView.findViewById(R.id.b_all);

        return rootView;
    }

    public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        allNews.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                try {

                    startActivity(new Intent(getActivity(), Newsmain.class));

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

我无法理解我错过了什么。同一个xml中有一个scrollview。我们应该单独处理这样的布局/字段吗?

对此方面的任何帮助表示高度赞赏。

由于 萨蒂亚

解决:我用activity_news_category重命名了xml,然后该变量不再为null。上面的xml被命名为activity_news_menu。所有试图帮助的人都有Thnx。

3 个答案:

答案 0 :(得分:0)

public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

allNews = (Button) view.findViewById(R.id.b_all);
        allNews.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                try {

                    startActivity(new Intent(getActivity(), Newsmain.class));

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

更新: 而不是rootView它应该是view

allNews = (Button) rootView.findViewById(R.id.b_all);中添加onViewCreated(),然后将其从onCreateView()

中删除

答案 1 :(得分:0)

public View onCreateView(最终的LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){

      View rootView = inflater.inflate(R.layout.activity_news_menu, container, false);
    getActivity().setTitle("Play");

    allNews = (Button) rootView.findViewById(R.id.b_all);

allNews.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            try {

                startActivity(new Intent(getActivity(), Newsmain.class));

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    return rootView;
}

在OncreateView方法中使用set onclicklistener。希望这有帮助

答案 2 :(得分:0)

1)正确关闭LinearLayout

2)删除android:id = "@+id/b_all"之间的空格,以便:

  <LinearLayout
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">


            <Button
                android:id="@+id/b_all"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:gravity="center"
                android:text="All \n news"
                android:textColor="#FFF"
                android:textSize="15sp"
                android:background="@drawable/button_bg_round"
                android:padding="5dp"
                android:textAllCaps="false"
                />

</LinearLayout>

然后重建项目。