单击后片段中的 AlertDialog 未显示

AlertDialog in fragment not showing after Clicking

提问人:ColeWrl Wallace 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22

问:

我被要求使用 BottomNavigationView 将一个包含一页的 Android 应用程序分成两页。 所以我选择了 BottomNavigationView + Viewpager + Fragments 来做这件事。 这是我是如何做到的:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getPermission(this);



        mViewPager = findViewById(R.id.viewpager);
        navigationView = findViewById(R.id.bottomnav);
        views.add(View.inflate(MainActivity.this,R.layout.fragment_planet,null));
        views.add(View.inflate(MainActivity.this,R.layout.fragment_setting,null));

        mViewPager.setAdapter(new PagerAdapter() {
            @Override
            public int getCount() {
                return views.size();
            }

            @Override
            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
                return view == object;
            }

            @NonNull
            @Override
            public Object instantiateItem(@NonNull ViewGroup container, int position) {
                container.addView(views.get(position));
                return views.get(position);
            }

            @Override
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
                container.removeView(views.get(position));
            }
        });

        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        navigationView.setSelectedItemId(R.id.planet);
                        break;
                    case 1:
                        navigationView.setSelectedItemId(R.id.setting);
                        break;

                }

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        navigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if (item.getItemId() == R.id.planet){
                    mViewPager.setCurrentItem(0);
                }
                else if(item.getItemId() == R.id.setting){
                    mViewPager.setCurrentItem(1);

                }
                return true;

            }
        });

问题在于,fragment_setting中有一个非常笨拙的按钮来调用 AlertDiglog,用户在其中编辑自己的用户名。这个按钮在非分离版本中效果很好,但是一旦分离,这个按钮就无法调用对话框,以下是fragment_setting中的相关代码:

        getActivity().findViewById(R.id.bntEdit).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showEditDialog();
            }
        });

......



    private void showEditDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("修改用户名");

        View dialogView = getLayoutInflater().inflate(R.layout.dialog_edit, null);
        final EditText editUsername = dialogView.findViewById(R.id.editUsername);
        final EditText editPassword = dialogView.findViewById(R.id.editPassword);

        builder.setView(dialogView);

        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String username = editUsername.getText().toString();
                String password = editPassword.getText().toString();

                if ("12345".equals(password)) {
                    textViewUpdatedUsername.setText( username);
                    saveUsernameToLocalFile(username);
                    Toast.makeText(getActivity(),"修改成功",Toast.LENGTH_SHORT).show();
                } else {
                    //textViewUpdatedUsername.setText("密码错误");
                    Toast.makeText(getActivity(),"密码错误",Toast.LENGTH_SHORT).show();
                }
            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }

我就像一个完全的业余爱好者,这个版本不是由我开发的,我对这种情况感到困惑。有什么我遗漏或不知道的吗?

1.我尝试调试,但是在“showEditDialog”方法中设置的断点根本不会被调用。 2.pevious开发人员测试并表示,用于在局域网中的另一台PC上与App通信的其他按钮运行良好。 3.我使用viewmodel在片段之间进行数据传输。即使我知道它可能没用,Imma 还是把它详细说明了。 4.我个人认为这可能不是对话框本身的问题,而是碎片中的按钮的问题。 logcat 中的 5.No 错误。

Android-Fragments 对话框

评论


答: 暂无答案