使用片段上的按钮更改片段

Posted

技术标签:

【中文标题】使用片段上的按钮更改片段【英文标题】:Change fragment using button on fragment 【发布时间】:2020-01-23 22:27:40 【问题描述】:

我创建了一个简单的应用程序,它有一个带有项目的导航抽屉,当被选中时,它会更改显示的片段。这没有问题,导航器上的每个项目都将片段加载到内容框架中。

我在其中一个片段中添加了一些按钮(稍后我也会在其他片段中添加一些按钮),但我无法弄清楚在哪里或如何听按钮按下,然后如何处理它以进行更改现有的片段。

我曾尝试向 MainaActivity 和 Fragment 添加代码,但它不起作用。

示例片段类

public class info extends Fragment 



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        //returning our layout file
        //change R.layout.fragment for each of your fragments
        return inflater.inflate(R.layout.fragment_info, container, false);
    

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);
        //you can set the title for your toolbar here for different fragments different titles
        getActivity().setTitle("Info");
    





这是我处理原始片段的代码

    private void displaySelectedScreen(int itemId) 

        //creating fragment object
        Fragment fragment = null;

        //initializing the fragment object which is selected
        switch (itemId) 
            case R.id.nav_atoz:
                fragment = new atoz();
                break;
            case R.id.nav_colour:
                fragment = new colour();
                break;
            case R.id.nav_type:
                fragment = new type();
                break;
            case R.id.nav_info:
                fragment = new info();
                break;



        

        //replacing the fragment
        if (fragment != null) 

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_frame, fragment).addToBackStack("tag");
            ft.commit();
                    


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
    

我做错了什么?有什么建议?我可以在装饰成按钮的片段上使用 Items 并从原始 MainActivity Case 语句中调用它们吗?

【问题讨论】:

【参考方案1】:

您应该在包含按钮的 Fragment 中创建一个 Click Listener:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    // Store the inflated layout
    View root = inflater.inflate(R.layout.my_fragment_layout, container, false);

    // Get a reference to the button using the layout
    Button myButton = root.findViewById(R.id.my_button);

    // Set the click listener
    myButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            // Perform the fragment transaction
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                .replace(R.id.content_container, new MyFragment(), "My_Fragment_Tag")
                .commit();
        
    );

    return root; // Return the inflated layout

【讨论】:

我已添加此内容,但在“getSupportFragmentManager”上出现错误 @TimHannah 您可能无法在片段中使用支持片段管理器。改用getFragmentManager() 试试看。我会更新我的答案。

以上是关于使用片段上的按钮更改片段的主要内容,如果未能解决你的问题,请参考以下文章

底部导航 如何从片段内部更改片段

从另一个片段的其他视图控制片段的视图

通过按钮更改 viewpager 片段 Click

使用 Kotlin 更改片段中的按钮背景

更改片段内布局的按钮

在方向更改时保留列表片段中的列表