如何使用intent打开Fragment中的Activity?

时间:2017-01-18 09:42:23

标签: android android-fragments nullpointerexception

当我在Fragment内的Button上使用onClickListener并使用intent打开一个Activity时,它会产生NullPointerException。

这是我的代码

public class TabFragment extends Fragment{

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

            View rootView = inflater.inflate(R.layout.tabs, container, false);

           Button tab1=(Button) getView().findViewById(R.id.tab1upgradeCost);
           tab1.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   Intent i = new Intent(getActivity(), MainActivity.class);
                  getActivity().startActivity(i);
               }
           });
            return rootView;
        }
    }

4 个答案:

答案 0 :(得分:2)

我认为问题在于你的观点是getView可能会返回null。

用这个代替你的代码。 我没有测试你的代码但可能有帮助。

public class TabFragment extends Fragment{

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

        View rootView = inflater.inflate(R.layout.tabs, container, false);

       Button tab1=(Button) rootView.findViewById(R.id.tab1upgradeCost);
       tab1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent i = new Intent(getActivity(), MainActivity.class);
              getActivity().startActivity(i);
           }
       });
        return rootView;
    }
}

答案 1 :(得分:2)

您获得NLP是因为tab1未使用右视图初始化

不要使用

Button tab1=(Button) getView().findViewById(R.id.tab1upgradeCost);

在onCreateView()getView()中将返回null,因为仍然没有启动片段。

改为使用

Button tab1=(Button) rooView.findViewById(R.id.tab1upgradeCost);

答案 2 :(得分:1)

更改

Button tab1=(Button) getView().findViewById(R.id.tab1upgradeCost);

Button tab1=(Button) rootView.findViewById(R.id.tab1upgradeCost);

答案 3 :(得分:-1)

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