java - (Android) 尝试使用微调器选择来切换 imageview 中的图像,但无法解析 onItemSelected 中的 imageview
问题描述
如标题中所述,我正在尝试编写代码,根据用户在微调器中的选择来切换 ImageView 中显示的图像(页面有 3 个微调器,但只有一个用于切换图像)。我在这里检查了几个类似问题的解决方案,几乎所有解决方案都在 onCreate 方法中实例化 ImageView 对象,并设置微调器侦听器的 onItemSelected 方法中使用的可绘制资源。但是,当我尝试在 onItemSelected 方法中引用 ImageView 对象时,我收到一条错误消息,指出“无法解析符号”。显然我错过了一些东西,但我无法弄清楚。
date_location.xml 中的 ImageView 和 Spinner:
<ImageView
android:id="@+id/map"
android:layout_width="wrap_content"
android:layout_height="118dp"
android:layout_marginBottom="43dp"
android:background="#ff7c7c "
app:layout_constraintBottom_toTopOf="@+id/locationSpinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/location1" />
<Spinner
android:id="@+id/locationSpinner"
android:layout_width="172dp"
android:layout_height="46dp"
android:layout_marginBottom="56dp"
android:layout_marginEnd="16dp"
android:background="#ff7c7c "
app:layout_constraintBottom_toTopOf="@+id/dateSpinner"
app:layout_constraintEnd_toEndOf="parent"></Spinner>
strings.xml 中使用的字符串数组:
<string-array name="locations">
<item>Arlington, PA</item>
<item>Burmingham, PA</item>
<item>Essex, PA</item>
</string-array>
LocationDate.java 中 onCreate 方法的代码片段:
final ImageView img = findViewById(R.id.map);
Spinner locationSpin = findViewById(R.id.locationSpinner);
ArrayAdapter<CharSequence> locationA = ArrayAdapter.createFromResource(this, R.array.locations, android.R.layout.simple_spinner_item);
locationA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
locationSpin.setAdapter(locationA);
locationSpin.setOnItemSelectedListener(this);
来自 LocationDate.java 的 onItemSelected 中的代码:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
switch (parent.getId())
{
case R.id.locationSpinner:
location = parent.getItemAtPosition(position).toString();
String[] locationsArray = getResources().getStringArray(R.array.locations);
if (location == locationsArray[0])
{
img.setImageResource(R.drawable.location1);
}else if (location == locationsArray[1])
{
img.setImageResource(R.drawable.location2);
}else if (location == locationsArray[2])
{
img.setImageResource(R.drawable.location3);
}
case R.id.dateSpinner:
showDate = parent.getItemAtPosition(position).toString();
case R.id.timeSpinner:
showTime = parent.getItemAtPosition(position).toString();
}
}
以防万一它在这里有用的是完整的 LocationDate.java 类:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
public class LocationDate extends AppCompatActivity implements
AdapterView.OnItemSelectedListener
{
String location = "";
String showDate = "";
String showTime = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.date_location);
final ImageView img = findViewById(R.id.map);
Spinner locationSpin = findViewById(R.id.locationSpinner);
ArrayAdapter<CharSequence> locationA = ArrayAdapter.createFromResource(this, R.array.locations, android.R.layout.simple_spinner_item);
locationA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
locationSpin.setAdapter(locationA);
locationSpin.setOnItemSelectedListener(this);
Spinner dateSpin = findViewById(R.id.dateSpinner);
ArrayAdapter<CharSequence> dateA = ArrayAdapter.createFromResource(this, R.array.dates, android.R.layout.simple_spinner_item);
dateA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dateSpin.setAdapter(dateA);
dateSpin.setOnItemSelectedListener(this);
Spinner timeSpin = findViewById(R.id.timeSpinner);
ArrayAdapter<CharSequence> timeA = ArrayAdapter.createFromResource(this, R.array.times, android.R.layout.simple_spinner_item);
timeA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
timeSpin.setAdapter(timeA);
timeSpin.setOnItemSelectedListener(this);
Button proceed2 = findViewById(R.id.button2);
proceed2.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Intent data = new Intent();
data.putExtra("Location", location);
data.putExtra("Date", showDate);
data.putExtra("Time", showTime);
setResult(Activity.RESULT_OK ,data);
finish();
}
});
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
switch (parent.getId())
{
case R.id.locationSpinner:
location = parent.getItemAtPosition(position).toString();
String[] locationsArray = getResources().getStringArray(R.array.locations);
if (location == locationsArray[0])
{
img.setImageResource(R.drawable.location1);
}else if (location == locationsArray[1])
{
img.setImageResource(R.drawable.location2);
}else if (location == locationsArray[2])
{
img.setImageResource(R.drawable.location3);
}
case R.id.dateSpinner:
showDate = parent.getItemAtPosition(position).toString();
case R.id.timeSpinner:
showTime = parent.getItemAtPosition(position).toString();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
}
^ 格式在粘贴时略有混乱,但希望它仍然具有足够的可读性。
谢谢阅读!
解决方案
找不到该符号,因为您在方法final ImageView img = findViewById(R.id.map);
的范围内声明,但在尝试实际使用它时onActivityCreate(Bundle)
没有在内部定义它。onItemSelected(...)
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
只需在您尝试访问它之前将该声明移入,该符号将被解析。
推荐阅读
- spring - lombok.configuration 在多模块项目中应用@Generated 注解
- javascript - JavaScript 内部的字典比较是如何工作的?
- python - 如何检查名字和姓氏是否在Python中的名字列表中?是否可以?
- arguments - 在屏障条件下使用受保护的入口参数
- amazon-web-services - AWS Auto Scaling 添加额外节点导致 5xx 错误
- python - 这个行插入有什么问题?
- javascript - Chart.js 工具提示是否不适用于对数或笛卡尔时间轴?
- litedb - 更新 LiteDB 中的整个文档
- ruby - 坚固的 gem 无法构建原生扩展
- javascript - 如果 PUT 同时具有凭据“包含”和 Content-Type,则出现 CORS 错误