2017-08-02 68 views
0

我有3個Spinners,我從他們每個人中選擇值。但是,當我在下一個按鈕的onClickListener()之外聲明setOnItemSelected()方法時,選定的值不會顯示在Toast中。當我在按鈕的onClickListener中聲明setOnItemSelected()方法時,它可以工作,但當我從上一個微調器中選擇「Set Limit」時,我無法隱藏編輯文本。 請幫忙。 以下是我的.java文件。Android微調控制器實現不顯示選定的項目

public class AvailabilityActivity extends AppCompatActivity { 

private Button next; 
private Spinner advanceNotice, shortestTrip, longestDist; 
private Bundle bundle; 
private EditText setLimit; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_availability); 

    bundle = getIntent().getExtras(); 
    intializeSpinners(); 
    setLimit = (EditText) findViewById(R.id.setlimit); 
    ArrayAdapter<CharSequence> adapteradvNotice = ArrayAdapter.createFromResource(this, R.array.advNoticeArray, R.layout.spinner_layout); 
    adapteradvNotice.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    advanceNotice.setAdapter(adapteradvNotice); 

    ArrayAdapter<CharSequence> adaptershortestTrip = ArrayAdapter.createFromResource(this, R.array.shortestTripArray, R.layout.spinner_layout); 
    adaptershortestTrip.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    shortestTrip.setAdapter(adaptershortestTrip); 

    ArrayAdapter<CharSequence> adapterlongestDist = ArrayAdapter.createFromResource(this, R.array.longestDistanceArray, R.layout.spinner_layout); 
    adapterlongestDist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    longestDist.setAdapter(adapterlongestDist); 
    onNextPressed(); 
} 

private void intializeSpinners() { 
    advanceNotice = (Spinner) findViewById(R.id.acceptAdvanceNotice); 
    shortestTrip = (Spinner) findViewById(R.id.acceptShortestTrip); 
    longestDist = (Spinner) findViewById(R.id.acceptLongestTrip); 
} 

private void onNextPressed() { 
    next = (Button) findViewById(R.id.nextButton1); 

    final String[] setLimitText = {""}; 
    final String[] selectedlongestDist = new String[1]; 
    longestDist.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      selectedlongestDist[0] = parent.getItemAtPosition(position).toString(); 
      if (selectedlongestDist[0].equals("Set Limit")){ 
       setLimit.setVisibility(View.VISIBLE); 
       setLimitText[0] = setLimit.getText().toString(); 
      } 
      if (selectedlongestDist[0].equals("No Limit")) { 
       setLimit.setVisibility(View.INVISIBLE); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

    if (setLimitText[0] == "") 
     setLimitText[0] = selectedlongestDist[0]; 


    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String[] selectedNotice = new String[1]; 
      advanceNotice.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        selectedNotice[0] = parent.getItemAtPosition(position).toString(); 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> parent) { 

       } 
      }); 

      final String[] selectedshortestTrip = new String[1]; 
      shortestTrip.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
        selectedshortestTrip[0] = parent.getItemAtPosition(position).toString(); 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> parent) { 

       } 
      }); 

      Toast.makeText(getApplicationContext(), setLimitText[0], Toast.LENGTH_LONG).show(); 

      bundle.putString("advancenotice", selectedNotice[0]); 
      bundle.putString("shortesttrip", selectedshortestTrip[0]); 
      bundle.putString("longesttrip", setLimitText[0]); 

      Intent intent = new Intent(getBaseContext(),ImageActivity.class); 
      intent.putExtras(bundle); 
      startActivity(intent); 
     } 
    }); 
} 
} 

以下是我的佈局文件。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.csci567.dailyrentals.AvailabilityActivity"> 


<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="How much advance notice do you need to confirm a trip request?" 
    android:textColor="#000000" 
    android:textSize="18dp" 
    android:layout_marginLeft="15dp" 
    android:id="@+id/advanceNoticeRequestText" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.035" 
    android:layout_marginStart="15dp" /> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="Advance notice" 
    android:textSize="14dp" 
    android:id="@+id/advanceNoticeText" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.13" 
    android:layout_marginStart="15dp" /> 

<Spinner 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/acceptAdvanceNotice" 
    android:hint="Advance Notice" 
    style="@style/Widget.AppCompat.Spinner.Underlined" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.18" 
    android:layout_marginStart="15dp" /> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="Block trips that don't give you enough advance notice." 
    android:textSize="16dp" 
    android:id="@+id/blockNoticeText" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.26" 
    android:layout_marginStart="15dp" /> 

<View android:background="#a8a8a6" 
    android:layout_width = "0dp" 
    android:layout_height="1dp" 
    android:id="@+id/separatorLine1" 
    android:layout_marginTop="25dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.3"/> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="How long would you like trips to last?" 
    android:textSize="18dp" 
    android:textColor="#000000" 
    android:id="@+id/tripDurationText" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.4" 
    android:layout_marginStart="15dp" /> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="Shortest possible trip" 
    android:textSize="14dp" 
    android:id="@+id/shortestTripText" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.46" 
    android:layout_marginStart="15dp" /> 

<Spinner 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/acceptShortestTrip" 
    android:hint="Enter Shortest Trip" 
    style="@style/Widget.AppCompat.Spinner.Underlined" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.52" 
    android:layout_marginStart="15dp" /> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="Longest Possible trip" 
    android:textSize="14dp" 
    android:id="@+id/longestTripText" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.6" 
    android:layout_marginStart="15dp" /> 

<Spinner 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/acceptLongestTrip" 
    android:hint="Enter Longest Trip" 
    style="@style/Widget.AppCompat.Spinner.Underlined" 
    android:layout_marginLeft="15dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.66" 
    android:layout_marginStart="15dp" /> 

<EditText 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/setlimit" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="0.76" 
    android:hint="Enter the value of longest possible trip" 
    android:layout_marginStart="15dp" 
    android:layout_marginLeft="15dp" /> 

<Button 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="35dp" 
    android:text="Next" 
    android:textSize="18dp" 
    android:textColor="#ffffff" 
    android:background="#8b36bc" 
    android:id="@+id/nextButton1" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintVertical_bias="1.0"/> 

</android.support.constraint.ConstraintLayout> 

回答

1

你編碼的方式是這個問題。

你必須改變的第一件事是你設置監聽器的地方。您應該避免在其他偵聽器中設置偵聽器。其次,代碼將執行這些偵聽器中的所有代碼,然後在這些偵聽器中執行代碼。

第三,如果您想要在Spinner內顯示Toast的消息,請將其放入微調器的偵聽器中。

嘗試重新組織代碼思考這些提示,看看你是否會再次遇到問題。

+0

好的。將嘗試重新排列它。感謝您的回覆 –

+0

我試着把所有setOnItemSelectListener()放在onClickListener()之外,其他一切正常。但正如你在我的代碼中看到的那樣,我需要把這個值放入這個包中並傳遞給下一個活動。現在我不能把bundle放在setOnItemSelectListener()中,因爲每次用戶選擇一個值時,它都會被輸入到bundle中。而且我無法訪問按鈕的onClickListener()內的選定值。 –

+0

@ParagAgrawal你可以根據你的商業規則做很多事情。您可以將來自'setOnItemSelectListener()'的數據存儲在一個變量中,並在您調用該活動時獲取該數據,並且此時可以將數據傳遞給該包,甚至可以使用該包本身。您可以直接從'setOnItemSelectListener()'中將數據放入包中,並進行檢查以避免重複值。我有一個問題,如果你只使用數組的第一個位置,爲什麼要使用String []? –

相關問題