반응형
Android : 프로그래밍 방식으로 Java 코드에서 Spinner 채우기
프로그래밍 방식으로 Java 코드에서 스피너를 어떻게 채우나요?
다음과 같은 레이아웃에 스피너가 있습니다.
<Spinner
android:id="@+id/consultation_deseases"
android:layout_width="@dimen/bigSpinnerWidth"
android:layout_height="@dimen/bigSpinnerHeight"
android:prompt="@string/disease_prompt" />
Java 코드를 사용하여 어댑터를 만들고 항목을 추가해야합니다.
// you need to have a list of data that you want the spinner to display
List<String> spinnerArray = new ArrayList<String>();
spinnerArray.add("item1");
spinnerArray.add("item2");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner sItems = (Spinner) findViewById(R.id.spinner1);
sItems.setAdapter(adapter);
또한 무엇을 선택했는지 알아 보려면 다음과 같이 할 수 있습니다.
String selected = sItems.getSelectedItem().toString();
if (selected.equals("what ever the option was")) {
}
다음은 완전히 프로그래밍 방식으로 수행되는 예입니다.
- Spinner를 초기화합니다.
- 문자열 목록을 통해 데이터로 채 웁니다.
- Spinner의 크기를 조정하고 내보기에 추가합니다.
- Spinner 글꼴 형식 (글꼴 크기, 색상, 패딩)을 지정합니다.
- 스피너를 지 웁니다.
- Spinner에 새 값을 추가합니다.
- 스피너를 다시 그립니다.
다음 클래스 변수를 사용하고 있습니다.
Spinner varSpinner;
List<String> varSpinnerData;
float varScaleX;
float varScaleY;
A-Spinner를 초기화하고 렌더링합니다 (varRoot는 내 주요 활동에 대한 포인터입니다).
public void renderSpinner() {
List<String> myArraySpinner = new ArrayList<String>();
myArraySpinner.add("red");
myArraySpinner.add("green");
myArraySpinner.add("blue");
varSpinnerData = myArraySpinner;
Spinner mySpinner = new Spinner(varRoot);
varSpinner = mySpinner;
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, myArraySpinner);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww
mySpinner.setAdapter(spinnerArrayAdapter);
B-크기 조정 및 내보기에 스피너 추가 :
FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
myParamsLayout.gravity = Gravity.NO_GRAVITY;
myParamsLayout.leftMargin = (int) (100 * varScaleX);
myParamsLayout.topMargin = (int) (350 * varScaleY);
myParamsLayout.width = (int) (300 * varScaleX);;
myParamsLayout.height = (int) (60 * varScaleY);;
varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout);
C-Click 핸들러를 만들고 이것을 사용하여 글꼴을 설정합니다.
mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int myPosition, long myID) {
Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID);
((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN);
((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f) );
((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1);
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
}
D-새 데이터로 Spinner 업데이트 :
private void updateInitSpinners(){
String mySelected = varSpinner.getSelectedItem().toString();
Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);
varSpinnerData.clear();
varSpinnerData.add("Hello World");
varSpinnerData.add("Hello World 2");
((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();
varSpinner.invalidate();
varSpinner.setSelection(1);
}
}
What I have not been able to solve in the updateInitSpinners, is to do varSpinner.setSelection(0); and have the custom font settings activated automatically.
UPDATE:
This "ugly" solution solves the varSpinner.setSelection(0); issue, but I am not very happy with it:
private void updateInitSpinners(){
String mySelected = varSpinner.getSelectedItem().toString();
Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);
varSpinnerData.clear();
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, varSpinnerData);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
varSpinner.setAdapter(spinnerArrayAdapter);
varSpinnerData.add("Hello World");
varSpinnerData.add("Hello World 2");
((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();
varSpinner.invalidate();
varSpinner.setSelection(0);
}
}
Hope this helps......
참고URL : https://stackoverflow.com/questions/11920754/android-fill-spinner-from-java-code-programmatically
반응형
'program story' 카테고리의 다른 글
DateTime을 웹 UTC 형식으로 어떻게 포맷 할 수 있습니까? (0) | 2020.10.11 |
---|---|
"유형 'T'가 참조 유형이어야 할 때"메소드를 제네릭으로 만드는 방법은 무엇입니까? (0) | 2020.10.11 |
구분되지 않는 공백이있는 ReactJS 렌더링 문자열 (0) | 2020.10.11 |
createClob () 메서드로 인해 컨텍스트 LOB 생성을 비활성화하면 오류가 발생했습니다. (0) | 2020.10.11 |
Android : 대화 상자의 EditText가 소프트 키보드를 표시하지 않습니다. (0) | 2020.10.11 |