【问题标题】:Populate ListView based on Spinner Selection根据 Spinner Selection 填充 ListView
【发布时间】:2018-04-27 02:44:19
【问题描述】:

我想知道如何根据微调器上选择的内容填充我的 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 来检索在此微调器中选择的值。只是为了测试,我正在使用 toast 消息显示在微调器中选择了什么值,但这不能正常工作。这就是我的 onItemSelected 方法当前的样子,有人可以指出我正确的方向以使 toast 工作(用于测试目的),或者甚至向我展示如何让 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();
            }
        }

【问题讨论】:

    标签: android listview android-studio spinner


    【解决方案1】:

    您可以在微调器上使用setOnItemSelectedListener() 方法来获取所选位置的回调。可以根据位置填充listview。

    【讨论】:

    • 谢谢。我在 onCreate 方法中添加了一个 setOnItemSelectedListener。我用 toast 消息填充它,以便我可以测试以确保正确选择微调器。虽然不是。它没有拾取我的 If 语句,它只是执行 else。我用这个更新了我的问题,有什么建议吗?
    【解决方案2】:

    我解决了我自己的问题,只是想我会在这里发帖帮助任何人。

    我的字符串数组与我的问题中的相同(位于 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) {
    
    }
    

    这可以满足我的需要!这可能不是最好的选择,但作为一个新程序员,这对我有用。如果您有更好的方法,请告诉我。我很想了解更多!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多