Не могу добавить setOnClickListener для кнопки в Навигаторе - PullRequest
0 голосов
/ 25 апреля 2020

Я хочу создать AlertDialog при нажатии на кнопку внутри моего навигационного ящика. Я написал следующий код в моей функции onCreate из своей деятельности. java file

Button chooseBuildings = findViewById(R.id.chooseBuilding);
    final String[] colors = {"red", "green", "blue", "black"};
    chooseBuildings.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(StartNavigationActivity.this);
            builder.setTitle("Choose a building");
            builder.setItems(colors, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            builder.show();
        }
    });

При проверке моего logcat я получаю NullPointerException:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

Вот мой menu.xml файл:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"

   >

    <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_settings"
        android:title="Settings"
        />
    <item
        android:id="@+id/chooseBuilding"
        android:icon="@drawable/ic_change_building"
        android:title="Choose Building"
        />
    <item
        android:id="@+id/feedback"
        android:title="Send Feedback"
        android:icon="@drawable/ic_feedback"
        />
    <item
        android:id="@+id/help"
        android:title="Help"
        android:icon="@drawable/ic_help"
        />
</menu>

Как правильно сослаться на кнопку из моего ящика навигации, чтобы прослушиватель событий работал?

1 Ответ

1 голос
/ 26 апреля 2020

Вы не можете использовать списки кликов для пунктов меню таким образом, но вместо этого вы можете использовать setNavigationItemSelectedListener:

Сначала внедрить слушатель в вашей деятельности:

public class YourActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener

Затем установите слушатель для Навигационный ящик:

NavigationView mNavigationView = findViewById(R.id.navigation view id);
mNavigationView.setNavigationItemSelectedListener(this);

И, наконец, ловит событие:

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.chooseBuilding: {
            AlertDialog.Builder builder = new AlertDialog.Builder(StartNavigationActivity.this);
            builder.setTitle("Choose a building");
            builder.setItems(colors, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            builder.show();
        }
    }
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...