如果在 AlertDialog 中使用 ListView,可能会遇到一些问题,例如当 ListView 的高度大于屏幕高度时,对话框会自动调整大小,在某些情况下会导致不良视觉效果。解决这个问题的最佳解决方案是重构代码以使用自定义 DialogFragment。
以下是使用 DialogFragment 的代码示例:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private void showDialog() {
FragmentManager fragmentManager = getSupportFragmentManager();
MyDialogFragment myDialogFragment = new MyDialogFragment();
myDialogFragment.show(fragmentManager, "dialogFragment");
}
}
MyDialogFragment.java
public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_layout, null);
ListView listView = view.findViewById(R.id.listView);
ArrayAdapter adapter = new ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, new String[]{"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"});
listView.setAdapter(adapter);
builder.setView(view)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do something
}
});
return builder.create();
}
}
通过使用 DialogFragment,您可以更好地控制对话框的外观和行为,并避免在特定设备上出现视觉上不良的效果。