0

我試圖創建一個顯示數組列表中的數據的微調器。ArrayList不顯示在Spinner上

當我點擊下拉菜單時,它會顯示列表,但是當我點擊下拉列表中的某個項目時,它不會顯示微調器上的值。

我在這裏錯過了什麼嗎?

注意:昨天我試圖檢查使用Log.d()和System.out.println,itemOnSelected()不,但今天它工作正常。也許我重建項目,或者我已經改變了代碼中的某些東西,但是在單擊微調器內的項目後,微調器上的值仍然不顯示。

Spinner spnSubjectIDInfo; 
ArrayList<String> subjectList; 
ArrayAdapter<String> adpSubj; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    subjectList = new ArrayList<String>(); 
    subjectList .add("John"); 
    subjectList .add("Maxi"); 
    subjectList .add("Jeni"); 

    spnSubjectIDInfo = (Spinner) v.findViewById(R.id.spnSubjectIDInfo); 
    adpSubj = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_spinner_item, subjectList); 
    adpSubj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spnSubjectIDInfo.setAdapter(adpSubj); 

    spnSubjectIDInfo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(this, parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show(); 
     } 

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

     } 
    }); 
} 

XML

<Spinner 
    android:id="@+id/spnSubjectIDInfo" 
    android:layout_width="30dp" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="54dp" 
    android:layout_centerHorizontal="true" /> 
+0

你可以嘗試改變 「Toast.makeText(這個..」 到 「Toast.makeText(getBaseContext()」 –

+0

'getItemAtPosition' 方法返回一個對象,你需要調用「的toString()方法以獲得該對象的字符串表示形式 – ADimaano

+0

發佈完整代碼 – MinnuKaAnae

回答

0

經過幾次更多搜索後,我意識到我必須將微調器的寬度大小設置爲wrap_content,因爲該值的長度不支持在單擊項目後在微調器上顯示它。

<Spinner 
    android:id="@+id/spnSubjectIDInfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="54dp" 
    android:layout_centerHorizontal="true" /> 
1
Hope this will help you. 

public class SpinnerTest extends AppCompatActivity { 

private ArrayList<String> subjectList; 
private ArrayAdapter<String> adpSubj; 
private Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_spinner_test); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    spinner= (Spinner) findViewById(R.id.spnSubjectIDInfo); 

    subjectList = new ArrayList<String>(); 
    subjectList .add("John"); 
    subjectList .add("Maxi"); 
    subjectList .add("Jeni"); 

    adpSubj = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, subjectList); 
    adpSubj.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adpSubj); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getApplicationContext(), spinner.getItemAtPosition(position).toString() + " selected", Toast.LENGTH_SHORT).show(); 
     } 

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

     } 
    }); 
} 
} 
+0

我很抱歉沒有提到這一點,但實際上並沒有調用onItemSelected()。我曾與的System.out.println() – UmarZaii

+0

測試它分享您的完整代碼,以便我們可以幫助你 – MinnuKaAnae

+0

我已經更新了我的代碼。這幾乎是。 – UmarZaii

1

您傳遞錯誤的情況下,以吐司例如:

如果你的代碼是在活動再由YourActivity.this更換this或者如果它在片段然後使用getActivity()或使用應用程序上下文getApplicationContext()。因爲目前,this代表了Spinner的onItemSelected偵聽器上下文。

務必:代替

Toast.makeText(/*Your activity/application context*/, parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show(); 

Toast.makeText(this, parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show(); 
+0

我很抱歉沒有提到這一點,但實際上並沒有調用onItemSelected()。我用System.out.println()測試了它。吐司在所有atm都沒有問題。 – UmarZaii

+0

你可以添加完整的代碼嗎? –

+0

我已經更新了我的代碼。這幾乎是。 – UmarZaii

1

改變 「這個」 到 「ActvityName.this」 或吐司使用 「getApplicationContext()」,你在吐司裏傳遞匿名類上下文。

象下面這樣:

spnSubjectIDInfo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(ActivityName.this,parent.getItemAtPosition(position)+ " selected", Toast.LENGTH_SHORT).show(); 
    } 

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

    } 
}); 
+0

我很抱歉沒有提到這一點,但實際上並沒有調用onItemSelected()。我用System.out.println()測試了它 – UmarZaii

2

試試這個

 AdapterView.OnItemSelectedListener() { 
@Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(ActivityName.this, subjectList.get(position).toString() " selected", Toast.LENGTH_SHORT).show(); 
    } 

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

    } 
    }); 
1
在微調setOnItemSelectedListener

methord無法正常工作。如果你想獲得選擇的值顯示在吐司使用此行

String Text = mySpinner.getSelectedItem().toString(); 

它在轉回到所選擇的值,它會幫助你的幫助我。