使用片段上的按钮更改片段
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()
试试看。我会更新我的答案。以上是关于使用片段上的按钮更改片段的主要内容,如果未能解决你的问题,请参考以下文章