簡體   English   中英

(Android)嘗試使用微調框選擇在imageview中切換圖像,但無法解析onItemSelected中的imageview

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM