意图无法在片段内部打开活动

时间:2019-06-27 08:45:02

标签: android android-intent fragment

我试图在TabActivity片段的PlaceholderFragment类内使用Intent打开下一个Activity。 这是我的代码。

  

PlaceHolderFragment类

    public ImageButton Next;
     public View onCreateView(
            @NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View rootView=inflater.inflate(R.layout.fragment_main_tab,container,true);
        Next=(ImageButton)rootView.findViewById(R.id.btn_expand);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updatedetails();
            }
        });

        View root=null;
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1:
                 root = inflater.inflate(R.layout.fragment_main_tab, container, false);
                break;
            case 2:
                    root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
                    break;
        }
        return root;
    }
public void updatedetails(){
    Intent intent = new Intent(getActivity(), Enquiery_followup.class);
    startActivity(intent);
}

3 个答案:

答案 0 :(得分:0)

您可以尝试以下方法吗?充气机的最后一个参数,请设为false。

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

当您不负责将子视图添加到父视图时,绝对不要将attachToRoot传递为true。

您可以通过此答案@ NOW OR NOT NOW

了解更多信息

答案 1 :(得分:0)

getActivity()并不是在片段中获取上下文的最佳方法。 并在创建视图时使attachToRoot = false 尝试以下代码

public class yourClass{
public ImageButton Next;

 Context context;
@Override public void onAttach(Context context) { 
super.onAttach(context);
 this.context=context; 
}
     public View onCreateView(
            @NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View rootView=inflater.inflate(R.layout.fragment_main_tab,container,false);
        Next=(ImageButton)rootView.findViewById(R.id.btn_expand);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updatedetails();
            }
        });

        View root=null;
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1:
                 root = inflater.inflate(R.layout.fragment_main_tab, container, false);
                break;
            case 2:
                    root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
                    break;
        }
        return root;
    }
public void updatedetails(){
    Intent intent = new Intent(context, Enquiery_followup.class);
    startActivity(intent);
}
}

尝试一下并发布更新。

  

编辑1:尝试在onCreateView()中返回rootView而不是root。

答案 2 :(得分:0)

public class TestFragment extends Fragment {

public ImageButton Next;

public View onCreateView(
        @NonNull LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main_tab, container, false);


    View root = null;
    switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
        case 1:
            root = inflater.inflate(R.layout.fragment_main_tab, container, false);
            break;
        case 2:
            root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
            break;
    }

    Next = (ImageButton) rootView.findViewById(R.id.btn_expand);
    Next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            updatedetails();
        }
    });

    return rootView;
}

public void updatedetails() {
    Intent intent = new Intent(getActivity(), Enquiery_followup.class);
    startActivity(intent);
}
}

重新排列这样的代码。并确保两个xml文件都包含ID为 btn_expand

的ImageButton

您的代码存在的问题是onClickListener在设置view之前。