프로그래밍 방식으로 선택한 스피너 항목 설정
나는 안드로이드 프로젝트를 작업 중이며 데이터베이스에서 채워지는 배열 어댑터를 사용하는 스피너를 사용하고 있습니다.
선택한 항목을 프로그래밍 방식으로 목록에서 설정하는 방법을 찾을 수 없습니다. 예를 들어, 스피너에 다음 항목이있는 경우 :
- 카테고리 1
- 카테고리 2
- 카테고리 3
화면을 만들 때 범주 2를 프로그래밍 방식으로 프로그래밍 방식으로 선택하는 방법은 무엇입니까? 나는 그것이 c # IE Spinner.SelectedText = "Category 2"와 비슷할 것이라고 생각했지만 Android에서는 이와 비슷한 방법이없는 것 같습니다.
다음을 사용하십시오 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
의 답변 은 Runnable을 사용하는 것이 추가 CPU로드로 인한 최후의 수단입니다.
대답은 -setSelection ()을 호출 할 올바른 장소를 선택 해야한다는 것 입니다. 예를 들어 저에게 효과적 입니다.
@Override
public void onResume() {
super.onResume();
yourSpinner.setSelection(pos);
}
그러나 onCreateView ()에서는 작동하지 않습니다 . 나는 이것이이 주제에 관심이있는 이유라고 생각합니다.
비밀은 안드로이드를 사용하면 어떤 방법 으로든 원하는 작업을 수행 할 수 없다는 것입니다. 여기 에 답을 보십시오 )
DB의 값을 사용하여 ArrayList에 저장 한 다음 사용하십시오.
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
값을 찾아서 선택하려면 다음을 수행하십시오.
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;
}
}
}
최적의 솔루션은 다음과 같습니다.
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"));
UtilityClass에서와 같이 이런 종류의 작업에 대한 일반적인 메소드를 만들 수 있습니다.
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 대신에 표시하려는 목록의 위치를 설정할 수 있습니다.
SimpleCursorAdapter가 있으므로이 게시물의 respose를 사용하기 위해 데이터를 복제해야합니다. 따라서 다음과 같이 시도하는 것이 좋습니다.
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(spinner_adapter.getPosition(selected_value)+1);
연락처 목록이 있으면 다음과 같이 할 수 있습니다.
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
나는 이미 대답했지만 하나의 항목을 선택하는 간단한 코드, 매우 간단하다는 것을 알고 있습니다.
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
spRaca.setSelection(x);
break;
}
}
이것은이 페이지의 다른 곳의 의견에 나와 있지만 답변으로 끌어내는 것이 유용하다고 생각했습니다.
어댑터를 사용하는 경우, 나는 것으로 나타났습니다 spinnerObject.setSelection(INDEX_OF_CATEGORY2)
요구 사항이 발생 후setAdapter
전화; 그렇지 않으면 첫 번째 항목은 항상 초기 선택입니다.
// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);
이는에 대한 AbsSpinner 코드 를 검토하여 확인됩니다 setAdapter
.
이것이 Kotlin에서 사용하는 것입니다.
spinner.setSelection(resources.getStringArray(R.array.choices).indexOf("Choice 1"))
필자의 경우이 코드는 내 하루를 구했습니다.
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.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);
}
});
Spinner
데이터로드 및 항목 선택 추적 을 위한 확장 기능을 만들었습니다 .
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의 솔루션과 비슷하지만 onStart ()에서 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' 카테고리의 다른 글
왜 모나드가 필요합니까? (0) | 2020.03.01 |
---|---|
MySQL my.cnf 위치를 찾으려면 어떻게합니까 (0) | 2020.03.01 |
@Resource vs @Autowired (0) | 2020.03.01 |
android에서 string.xml에서 값을 읽는 방법은 무엇입니까? (0) | 2020.03.01 |
유닉스 타임 스탬프 (epoch 이후 초)를 Ruby DateTime으로 변환하는 방법은 무엇입니까? (0) | 2020.03.01 |