【问题标题】:using switch case statement for spinner to display images in android programming在android编程中使用spinner的switch case语句来显示图像
【发布时间】:2013-03-04 20:45:13
【问题描述】:

我有一个带有景点列表的微调器。我想使用 switch case 语句来根据用户选择的景点更改显示的图像。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.attractions_layout);

    ArrayAdapter<String> attractionsAdapter = new ArrayAdapter<String> (Attractions.this, android.R.layout.simple_spinner_item, attractionEntries);

    attractionsSpinner = (Spinner) findViewById (R.id.spinnerAttractions);
    attractionsSpinner.setAdapter(attractionsAdapter);
    attractionsSpinner.setOnItemSelectedListener(this);

}
    @Override
    public void onItemSelected(AdapterView<?> parent,View view, int position, long id) {
        // TODO Auto-generated method stub
        int pos = attractionsSpinner.getSelectedItemPosition();
        ImageView imageView = (ImageView) findViewById(R.id.imageViewAttraction);
        String[] information = getResources().getStringArray(R.array.attractions_information_collection);

        switch (position)
        {
        case 0:
            image = R.drawable.avenue_of_stars;
            imageView.setImageResource(image);

            break;
        case 1:
            image = R.drawable.disneyland_fountain;
            imageView.setImageResource(image);

            break;  
        }
    }

我收到一条错误消息,提示“无法将图像解析为变量”

【问题讨论】:

    标签: android switch-statement spinner case


    【解决方案1】:

    您没有为image 声明类型。在你开始开关之前声明它

    int image = 0;
    switch (position)
        {
        case 0:
            image = R.drawable.avenue_of_stars;
            imageView.setImageResource(R.drawable.avenue_of_stars;);
    
            break;
        case 1:
            image = R.drawable.disneyland_fountain;
            imageView.setImageResource(R.drawable.disneyland_fountain);
    
            break;  
        }
    }
    

    或者只使用setImageResource()的值

      switch (position)
        {
        case 0:
            imageView.setImageResource(R.drawable.avenue_of_stars;);
    
            break;
        case 1:
            imageView.setImageResource(R.drawable.disneyland_fountain);
    
            break;  
        }
    }
    

    或者简化为

    int image = 0;
      switch (position)
        {
        case 0:
            image = R.drawable.avenue_of_stars;
            break;
        case 1:
            image = R.drawable.disneyland_fountain;
            break;  
        }
     imageView.setImageResource(R.drawable.disneyland_fountain);
    }
    

    【讨论】:

      【解决方案2】:

      错误消息告诉你你没有声明一个名为“image”的变量,因此当你使用这个词时它不知道你想做什么。

      把你的代码改成这样:

      private int image = -1; // <-- you have to declare a variable to be able to use it (in java).
      private imageView; // <-- declare this ImageView up here too, while your at it.
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      
          super.onCreate(savedInstanceState);
          setContentView(R.layout.attractions_layout);
          imageView = (ImageView) findViewById(R.id.imageViewAttraction); //Move findViewById() to here, calling it more than once is wasteful.
          ArrayAdapter<String> attractionsAdapter = new ArrayAdapter<String> (Attractions.this, android.R.layout.simple_spinner_item, attractionEntries);
      
          attractionsSpinner = (Spinner) findViewById (R.id.spinnerAttractions);
          attractionsSpinner.setAdapter(attractionsAdapter);
          attractionsSpinner.setOnItemSelectedListener(this);
      
      }
          @Override
          public void onItemSelected(AdapterView<?> parent,View view, int position, long id) {
              // TODO Auto-generated method stub
              int pos = attractionsSpinner.getSelectedItemPosition();
              String[] information = getResources().getStringArray(R.array.attractions_information_collection);
              switch (position)
              {
              case 0:
                  image = R.drawable.avenue_of_stars;
                  imageView.setImageResource(image);
      
                  break;
              case 1:
                  image = R.drawable.disneyland_fountain;
                  imageView.setImageResource(image);
      
                  break;  
              }
          }
      

      您必须声明一个名为 image 的 int 以便能够将 id 存储到其中。

      还请注意,每次用户选择某些内容时调用findViewById() 来获取对您的图像视图的引用是一种浪费,您应该在onCreate() 中获取您的引用,然后在每次后续调用@ 时使用该引用987654325@

      最后一个提示:您似乎缺乏对 Java 编程和语法的一些基础知识的掌握。我强烈建议您现在花点时间回去做一些工作,让您在深入了解复杂的 Android 项目之前更好地熟悉 Java 语言。这样做会让您的生活更轻松 =)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2021-02-19
        • 2016-06-27
        • 2021-10-01
        相关资源
        最近更新 更多