gpt4 book ai didi

java - 使用 ViewPager2 在 AlertDialog 中自定义 TabLayout

转载 作者:行者123 更新时间:2023-12-02 08:50:47 24 4
gpt4 key购买 nike

我对编写应用程序相对较新,目前正在处理我的第二个项目。我有一个名为 AddNetwork 的 Activity ,其中包含一个应该打开 AlertDialog 的按钮。在 AlertDialog我想要一个TabLayout有两个选项卡,每个选项卡显示不同的内容。我已经尝试实现这个目标大约 8 个小时,我发现了一些教程可以部分解决我的问题,但没有什么是真正切题的。我想我可以使用 ViewPager2 解决我的问题,但我还没有让它发挥作用。到目前为止,我的代码工作如下:

AddNetwork.java创建 AlertDialogSelectWifi.java 的实例,延伸DialogFragment并膨胀alertdialog_select_wifi.XML包含 TabLayout 的布局文件和一个 ViewPager2 。也在 DialogFragment ,我正在尝试将适配器设置为 viewPager ,即ViewPagerAdapter.java ,延伸FragmentStateAdapter 。从那里我想附加两个 fragment AlertDialogRecentFragment.java (与 fragment_alert_dialog_recent.xml )和 AlertDialogTypeFragment.java (与 fragment_alert_dialog_type.xml )。请注意,后者尚未包含在代码中,因此到目前为止我只会向选项卡添加一个 fragment (我猜)。所以目前,我的代码是我找到并遵循的所有教程的有点困惑的混合体。它不会导致任何错误,我可以打开警报对话框,但是 fragment_alert_dialog_recent.xml并且选项卡不可见。我真的不知道我还可以尝试或更改我的代码。总的来说,我不确定设置ViewPagerAdapter是否正确。在 AlertDialogSelectWifi.java文件与否。我错过了什么或做错了什么?非常感谢任何帮助!

这是我的代码:

AddNetwork.java

public class AddNetwork extends AppCompatActivity {

Context context = this;

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_network);


//BUTTON
final MaterialButton buttonSelectWifi;
buttonSelectWifi = (MaterialButton) findViewById(R.id.button2);
buttonSelectWifi.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

//CREATE ALERT DIALOG
FragmentManager fm = getSupportFragmentManager();
DialogFragment dialog = AlertDialogSelectWifi.newInstance(context);
dialog.show(fm, "dialog");

}
});
}
}

AlertDialogSelectWifi.java

public class AlertDialogSelectWifi extends DialogFragment {

static Context mContext;

public static AlertDialogSelectWifi newInstance(Context context) {
mContext = context;
return new AlertDialogSelectWifi();
}


@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);

LayoutInflater inflater = requireActivity().getLayoutInflater(); //getActivity().getLayoutInflater();
View alertLayout = inflater.inflate(R.layout.alertdialog_select_wifi, null);

builder.setTitle("Add Saved Network")
.setView(alertLayout)
.setCancelable(true)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});

return builder.create();
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.alertdialog_select_wifi, container, false);
return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);


ViewPager2 viewPager = view.findViewById(R.id.viewpager);
TabLayout tabLayout = view.findViewById(R.id.tablayout);
ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity(), mContext, viewPager);

viewPager.setAdapter(adapter);

new TabLayoutMediator(tabLayout, viewPager,
new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText("Tab " + (position + 1));
}
}).attach();
}
}

ViewPageAdapter.java

public class ViewPagerAdapter extends FragmentStateAdapter {

private LayoutInflater mInflater;
private ViewPager2 viewPager;

public ViewPagerAdapter(FragmentActivity fragmentActivity, Context context, ViewPager2 viewPager) {
super(fragmentActivity);
this.mInflater = LayoutInflater.from(context);
this.viewPager = viewPager;
}

@NonNull
@Override
public Fragment createFragment(int position) {
return AlertDialogRecentFragment.newInstance();
}

@Override
public int getItemCount() {
return 0;
}
}

最佳答案

如果我正确理解了您的问题,请像这样更改您的适配器:

public class ViewPagerAdapter extends FragmentStateAdapter {

public ViewPagerAdapter(FragmentActivity fragmentActivity) {
super(fragmentActivity);
}

@NonNull
@Override
public Fragment createFragment(int position) {
if(position == 0)
return new AlertDialogRecentFragment();
else
return new AlertDialogTypeFragment();
}

@Override
public int getItemCount() {
return 2;
}
}

关于java - 使用 ViewPager2 在 AlertDialog 中自定义 TabLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com