Хватит использовать Reflection! Это плохо!
Ну, хотя библиотека поддержки не дает нам возможность выбрать элемент из BottomNavigationView , который будет отображаться в первый раз, когда он будет виден, у нас есть две возможности:
Во-первых, используя цикл:
private void setupBottomNavigationView() {
// Get the menu from our navigationBottomView.
Menu bottomNavigationViewMenu = bottomNavigationView.getMenu();
// Uncheck the first menu item (the default item which is always checked by the support library is at position 0).
bottomNavigationMenu.findItem(R.id.action_one).setChecked(false);
// Check the wished first menu item to be shown to the user.
bottomNavigationMenu.findItem(R.id.action_two).setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Menu bottomNavigationMenu = bottomNavigationView.getMenu();
for (int i = 0; i < bottomNavigationMenu.size(); i++) {
if (item.getItemId() != bottomNavigationMenu.getItem(i).getItemId()) {
bottomNavigationMenu.getItem(i).setChecked(false);
}
}
switch (item.getItemId()) {
case R.id.action_one :
replaceFragment(new OneFragment());
break;
case R.id.action_two :
replaceFragment(new TwoFragment());
break;
case R.id.action_three :
replaceFragment(new ThreeFragment());
break;
}
return false;
}
});
}
Во-вторых, без цикла, но с переменной класса (поскольку логика выполняется из внутри внутреннего класса):
private void setupBottomNavigationView() {
// Get the menu from our navigationBottomView.
Menu bottomNavigationViewMenu = bottomNavigationView.getMenu();
// Uncheck the first menu item (the default item which is always checked by the support library is at position 0).
bottomNavigationViewMenu.findItem(R.id.action_one).setChecked(false);
// Check the wished first menu item to be shown to the user. Also store that menu item on a variable to control when a menu item must be unchecked.
mActiveBottomNavigationViewMenuItem = bottomNavigationViewMenu.findItem(R.id.action_two).setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem selectedMenuItem) {
switch (selectedMenuItem.getItemId()) {
case R.id.action_one :
replaceFragment(new OneFragment());
break;
case R.id.action_two :
replaceFragment(new TwoFragment());
break;
case R.id.action_three :
replaceFragment(new ThreeFragment());
break;
}
if (selectedMenuItem != mActiveBottomNavigationViewMenuItem){
mActiveBottomNavigationViewMenuItem.setChecked(false);
mActiveBottomNavigationViewMenuItem = selectedMenuItem;
}
return false;
}
});
}
private MenuItem mActiveBottomNavigationViewMenuItem;
Когда выполняется метод setupBottomNavigationView ()? В методе Activity onCreate () посмотрите:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
setupBottomNavigationView();
}
Простой и без расширенного кода.
Надеюсь, это поможет!
Хорошо ... кое-что ...
Первое
DropDownList2_TextChanged
не подключен к вашему DropDownList, поэтому я не могу понять, как это событие когда-либо сработает, если вы не выполните подключение в своем внутреннем коде
Второй
Вы скажете этот код здесь
DropDownList2.DataSource = td.DataSet
DropDownList2.DataSource = td
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString
DropDownList2.DataBind()
находится в вашем событии PageLoad. Вы завернули его в If Not IsPostBack
,
потому что в противном случае вы будете выполнять повторную привязку каждый раз и потеряете свой предыдущий выбор.
Когда вы привязываете данные в Page_Load, вы, по сути, также сбрасываете выбранный элемент.
Вы должны заключить любой код привязки, который существует в Page_Load, внутрь блок if (! IsPostBack).
EDIT: ... или If Not IsPostBack Then ... End If в VB.NET
вы можете попробовать использовать
DropDownList2.SelectedItem.Value
вместо
DropDownList2.SelectedItem.Text