Заполнить ListView на основе выбора Spinner - PullRequest
0 голосов
/ 27 апреля 2018

Мне интересно, как я могу заполнить свой ListView на основе того, что выбрано на счетчике.

У меня есть счетчик, заполненный строковым массивом из strings.xml следующим образом:

<string-array name="genres">
    <item>Action</item>
    <item>Adventure</item>
    <item>Animation</item>
    <item>Comedy</item>
    <item>Crime</item>
    <item>Drama</item>
    <item>Horror</item>
    <item>Science Fiction</item>
    <item>Thriller</item>
    <item>Western</item>
</string-array>

У меня есть другие созданные массивы, и в зависимости от выбранного жанра фильма, я хочу заполнить просмотр списка этими массивами:

<string-array name="actionMovie">
    <item>Die Hard</item>
    <item>The Dark Knight</item>
</string-array>

<string-array name="adventureMovie">
    <item>The Goonies</item>
    <item>Back to the Future</item>
</string-array>

Я не совсем уверен, как поступить с этим. Вот некоторые фрагменты того, что я имею в своей основной деятельности.

Spinner spinGenre;
ListView lstViewMovies;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
spinGenre = (Spinner)findViewById(R.id.spinnerGenre);
lstViewMovies = (ListView) findViewById(R.id.listViewMovies);

Я использовал setOnItemSelectedListener для получения значения, которое было выбрано в этом счетчике. Просто для тестирования я использую всплывающие сообщения, показывающие, какое значение выбрано в счетчике, но оно работает неправильно. Так выглядит мой метод onItemSelected, может ли кто-нибудь указать мне правильное направление, чтобы заставить тосты работать (в целях тестирования), или даже показать мне, как я могу заставить ListView заполняться правильным массивом строк?

spinGenre.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Object item = parent.getItemAtPosition(position).toString();
            if (item.toString() == "Action") {
                Toast.makeText(MainActivity.this, "Action Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Adventure") {
                Toast.makeText(MainActivity.this, "Adventure Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Animation") {
                Toast.makeText(MainActivity.this, "Aanimation Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Comedy") {
            Toast.makeText(MainActivity.this, "Comedy Genre Selected!",
                    Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Crime") {
                Toast.makeText(MainActivity.this, "Crime Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Drama") {
                Toast.makeText(MainActivity.this, "Drama Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Horror") {
                Toast.makeText(MainActivity.this, "Horror Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Science Fiction") {
                Toast.makeText(MainActivity.this, "Science Fiction Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Thriller") {
                Toast.makeText(MainActivity.this, "Thriller Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else if (item.toString() == "Western") {
                Toast.makeText(MainActivity.this, "Western Genre Selected!",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Please select another genre!",
                        Toast.LENGTH_SHORT).show();
            }
        }

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Я решил свою собственную проблему, просто думал, что я отправлю сюда, чтобы помочь кому-нибудь.

Мои строковые массивы остались такими же, как в моем вопросе (находится в strings.xml).

В моих методах onCreate я добавил следующее: вызов для слушателей:

spinGenre.setOnItemSelectedListener(this);
lstViewMovies.setOnItemClickListener(this);

Затем я заполнил строковые массивы, используя то, что было в моем файле strings.xml:

String [] action;
String [] adventure;
String [] animation;
String [] comedy;
String [] crime;
String [] drama;
String [] horror;
String [] scifi;
String [] thriller;
String [] western;

action = getResources().getStringArray(R.array.actionMovie);
adventure = getResources().getStringArray(R.array.adventureMovie);
animation = getResources().getStringArray(R.array.animationMovie);
comedy = getResources().getStringArray(R.array.comedyMovie);
crime = getResources().getStringArray(R.array.crimeMovie);
drama = getResources().getStringArray(R.array.dramaMovie);
horror = getResources().getStringArray(R.array.horrorMovie);
scifi = getResources().getStringArray(R.array.scienceFictionMovie);
thriller = getResources().getStringArray(R.array.thrillerMovie);
western = getResources().getStringArray(R.array.westernMovie);

Это конец моего onCreate. Мой новый метод onItemSelected выглядит следующим образом, и он заполнит представление списка требуемым массивом из файла strings.xml.

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    String item = parent.getItemAtPosition(position).toString();

    if (item.compareToIgnoreCase("Action") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, action);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Adventure") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, adventure);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Animation") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, animation);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Comedy") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, comedy);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Crime") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, crime);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Drama") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, drama);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Horror") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, horror);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Science Fiction") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, scifi);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Thriller") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, thriller);
        lstViewMovies.setAdapter(adapter);
    } else if (item.compareToIgnoreCase("Western") == 0) {
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, western);
        lstViewMovies.setAdapter(adapter);
    } else {
        Toast.makeText(MainActivity.this, "Please select another genre!",
                Toast.LENGTH_SHORT).show();
    }
}

//auto generated method with onItemSelected method - unused
public void onNothingSelected(AdapterView<?> parent) {

}

Это работает так, как мне нужно! Возможно, это не лучший вариант, но, как новый программист, это работает для меня. Если у вас есть лучший способ сделать это, пожалуйста, дайте мне знать. Я хотел бы узнать больше!

0 голосов
/ 27 апреля 2018

Вы можете использовать метод setOnItemSelectedListener() на счетчике, чтобы получить обратный вызов выбранной позиции. На основе позиции, вы можете заполнить список просмотра.

...