선택한 스피너 항목을 프로그래밍 방식으로 설정
저는 안드로이드 프로젝트를 하고 있으며 데이터베이스에서 입력되는 어레이 어댑터를 사용하는 스피너를 사용하고 있습니다.
목록에서 선택한 항목을 프로그래밍 방식으로 설정하는 방법을 찾을 수 없습니다.예를 들어, 스피너에 다음 항목이 있는 경우:
- 카테고리 1
- 카테고리 2
- 카테고리 3
화면이 생성될 때 카테고리 2를 선택 항목으로 프로그래밍하려면 어떻게 해야 합니까?C# I.E. 스피너랑 비슷할 것 같아서요.선택된텍스트 = "카테고리 2"이지만 안드로이드용으로 이와 유사한 방법은 없는 것 같습니다.
합니다.spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.
다음 답변 중 아무도 솔루션을 제공하지 않았습니다. 다만 다음과 같은 내용만 적용되었습니다.
mySpinner.post(new Runnable() {
@Override
public void run() {
mySpinner.setSelection(position);
}
});
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
위의 내용을 다음과 같이 사용할 수 있습니다.
selectSpinnerItemByValue(spinnerObject, desiredValue);
물론 색인으로 직접 선택할 수도 있습니다.
spinnerObject.setSelection(index);
일부 설명(적어도 단편에 대해서는 - 순수 활동으로 시도하지 않음).누군가 안드로이드를 더 잘 이해하는 데 도움이 되길 바랍니다.
Arun George의 가장 인기 있는 대답은 옳지만 경우에 따라 작동하지 않습니다.
Marco HC의 답변은 추가 CPU 로드로 인한 마지막 수단인 Runnable을 사용합니다.
정답은 - setSelection()으로 호출할 올바른 위치를 선택하는 것입니다. 예를 들어, 다음과 같습니다.
@Override
public void onResume() {
super.onResume();
yourSpinner.setSelection(pos);
}
그러나 CreateView()에서는 작동하지 않습니다.저는 그것이 이 주제에 대한 관심의 이유라고 생각합니다.
비밀은 Android에서는 어떤 방법으로도 원하는 것을 할 수 없다는 것입니다 - 웁스:( - 구성 요소가 준비되지 않았을 수 있습니다.다른 예로 - CreateView() 또는 Resume()에서 ScrollView를 스크롤할 수 없습니다(여기 답변 참조).
값을 찾아 선택하는 방법
private void selectValue(Spinner spinner, Object value) {
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).equals(value)) {
spinner.setSelection(i);
break;
}
}
}
DB의 값을 사용하여 ArrayList에 저장한 후 다음을 사용하는 것이 어떻습니까?
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
최적의 솔루션은 다음과 같습니다.
public String[] items= new String[]{"item1","item2","item3"};
// here you can use array or list
ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);
항목의 위치를 자동으로 가져오려면 다음 문을 추가합니다.
itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
당신은 나의 유틸리티 클래스에서 하는 것처럼 이러한 종류의 작업을 위한 일반적인 방법을 만들 수 있습니다.
public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
for(int i=0;i<array.length;i++) {
if(array[i].equals(text)) {
spinner.setSelection(i);
}
}
}
쉽게 할 수 spinner.setSelection(1)
할 수 있습니다.1 신대표시목모록위설수있다정습니할를치든의할.
코틀린에서 람다를 사용한 간단한 솔루션을 찾았습니다.
spinnerObjec.post {spinnerObjec.setSelection(yourIndex)}
저는 간단한 커서 어댑터를 가지고 있어서 이 게시물의 응답을 사용하기 위해 데이터를 복제해야 합니다.따라서 다음과 같은 방법을 사용하는 것이 좋습니다.
for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
if (spinnerRegion.getItemIdAtPosition(i) == Integer
.valueOf(signal.getInt(signal
.getColumnIndexOrThrow("id_region")))) {
spinnerRegion.setSelection(i);
break;
}
}
그것이 진정한 방법이라고 생각합니다.
코틀린에서 사용하는 것은 다음과 같습니다.
spinner.setSelection(resources.getStringArray(R.array.choices).indexOf("Choice 1"))
이미 답이 나왔다는 것은 알지만, 하나의 항목을 선택하는 간단한 코드, 매우 간단합니다.
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
이것은 나를 위한 일입니다.
spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
이는 이 페이지의 다른 부분에 있는 주석에 명시되어 있지만, 답변으로 끌어내는 것이 유용하다고 생각됩니다.
어댑터를 사용할 때, 저는 다음과 같은 것을 발견했습니다.spinnerObject.setSelection(INDEX_OF_CATEGORY2)
다음 이후에 발생해야 합니다.setAdapter
호출합니다. 그렇지 않으면 첫 번째 항목은 항상 초기 선택 항목입니다.
// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);
이는 다음에 대한 AbsSpinner 코드를 검토하여 확인할 수 있습니다.setAdapter
.
연락처 목록이 있는 경우 다음 작업을 수행할 수 있습니다.
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
spRaca.setSelection(x);
break;
}
}
대부분의 시간.spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
작동하지 않습니다.그냥 전화하시면 됩니다.spinner.setSelection(i);
그것은 당신의 논리에 달려 있습니다.
뷰가 완전히 로드되어 있고 인터페이스에서 호출하려면 호출을 제안합니다.
spinner.setAdapter(spinner_no_of_hospitals.getAdapter());
spinner.setSelection(i); // i is 0 or within adapter size
또는 활동/분절 라이프사이클 간에 변경을 원하는 경우 다음과 같이 전화하십시오.
spinner.post(new Runnable() {
@Override public void run() {
spinner.setSelection(i);
}
});
제가 사용하고 있는 코틀린 확장자는 다음과 같습니다.
fun Spinner.setItem(list: Array<CharSequence>, value: String) {
val index = list.indexOf(value)
this.post { this.setSelection(index) }
}
용도:
spinnerPressure.setItem(resources.getTextArray(R.array.array_pressure), pressureUnit)
효과적인 솔루션:
mySpinner.post(new Runnable() {
@Override
public void run() {
mySpinner.setSelection(position);
spinnerAdapter.notifyDataSetChanged();
}
});
예, 스피너의 setSelection 함수에서 원하는 스피너 항목의 인덱스를 전달하여 이를 달성할 수 있습니다.예:
스피너Object입니다.setSelection(INDEX_)OF_카테고리).
제 경우, 이 코드가 제 하루를 구했습니다.
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SpinnerAdapter adapter = spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
의 확장 기능을 만들었습니다.Spinner
데이터 로드 및 항목 선택 추적에 사용됩니다.
스피너.kt
fun <T> Spinner.load(context: Context, items: List<T>, item: T? = null) {
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_item, items).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
}
if (item != null && items.isNotEmpty()) setSelection(items.indexOf(item))
}
inline fun Spinner.onItemSelected(
crossinline itemSelected: (
parent: AdapterView<*>,
view: View,
position: Int,
id: Long
) -> Unit
) {
onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
itemSelected.invoke(parent, view, position, id)
}
}
}
사용 예
val list = listOf("String 1", "String 2", "String 3")
val defaultData = "String 2"
// load data to spinner
your_spinner.load(context, list, defaultData)
// load data without default selection, it points to first item
your_spinner.load(context, list)
// for watching item selection
your_spinner.onItemSelected { parent, view, position, id ->
// do on item selection
}
이것은 저에게 효과가 있었습니다.
@Override
protected void onStart() {
super.onStart();
mySpinner.setSelection(position);
}
@sberezin의 솔루션과 비슷하지만 Start()에서 setSelection()을 호출합니다.
저는 어제부터 같은 문제가 있었습니다.안타깝게도 배열 목록의 첫 번째 항목은 기본적으로 스피너 위젯에 표시됩니다.또한 배열 목록에서 각 요소가 포함된 이전에 선택한 항목을 찾아 첫 번째 요소와 위치를 전환합니다.여기 코드가 있습니다.
OnResume()
{
int before_index = ShowLastSelectedElement();
if (isFound){
Collections.swap(yourArrayList,before_index,0);
}
adapter = new ArrayAdapter<String>(CurrentActivity.this,
android.R.layout.simple_spinner_item, yourArrayList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item; yourListView.setAdapter(adapter);
}
...
private int ShowLastSelectedElement() {
String strName = "";
int swap_index = 0;
for (int i=0;i<societies.size();i++){
strName = yourArrayList.get(i);
if (strName.trim().toLowerCase().equals(lastselectedelement.trim().toLowerCase())){
swap_index = i;
isFound = true;
}
}
return swap_index;
}
언급URL : https://stackoverflow.com/questions/11072576/set-selected-item-of-spinner-programmatically
'programing' 카테고리의 다른 글
React Native에서 회전을 비활성화하는 방법은 무엇입니까? (0) | 2023.07.16 |
---|---|
\n,\r 및 \t를 공백으로 대체할 Oracle Regexp (0) | 2023.07.16 |
패키지의 압축 파일을 다운로드하고 보관하기 위해 파이썬의 pip을 사용하는 방법은 무엇입니까? (0) | 2023.07.16 |
잘라내기 vs 삭제 시작의 장단점 (0) | 2023.07.16 |
Python의 목록에서 각 튜플의 첫 번째 요소 가져오기 (0) | 2023.07.16 |