提问人:ColeWrl Wallace 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22
单击后片段中的 AlertDialog 未显示
AlertDialog in fragment not showing after Clicking
问:
我被要求使用 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 错误。
答: 暂无答案
评论