[英](Android) Trying to use spinner selection to toggle image in imageview, but cannot resolve imageview in onItemSelected
如標題中所述,我正在嘗試編寫代碼,以根據用戶在微調器中的選擇來切換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)
,即可解析該符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.