두 클래스의 다른 스피너를 만들었습니다. 다른 클래스에있는 다른 스피너의 선택된 값을 기반으로 한 스피너의 내용을 설정하려고합니다. . 어느 누구도 나를 도와 줘. 감사합니다.다른 클래스의 다른 스피너의 선택된 값을 기반으로 한 스피너의 내용을 동적으로 설정합니다.
답변
해결책이 있습니다. 구현하는 데 시간이 오래 걸릴 수도 있지만 완벽하게 작동 할 것입니다.
귀하의 ActivityOne.class에는 spinner_one이 있고 ActivityTwo.class에는 spinner_two가 있다고 가정 해 보겠습니다. 그리고 spinner_1에서 선택한 항목을 기반으로 spinner_2를 채 웁니다.
spinner_2에 대한 다음지금
spinner_1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// save your selected item into a SharedPreference Variable
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
:
String spinner1_value=get value from SharedPreference;
if(spinner1_value.equals("something_1"))
{
//populate spinner_2 accordingly
}
else if(spinner1_value.equals("something_2"))
{
//populate spinner_2 accordingly
}
else
{
//populate spinner_2 accordingly
}
그리고, 당신의 ActivityTwo.class의 onResume에서 spinner_2()을 채우기 위해이 코드를 삽입하는 것을 잊지 않는 때문에 사용자가 spinner_1 값에서 변경 한 내용을 반영합니다.
이렇게하면 spinner_1의 값을 spinner_1 값에 따라 변경할 수 있습니다.
간단히 말해서 새로운 ArrayAdapter를 Spinner에 할당하거나 기존 ArrayAdapter에서 항목을 제거/추가하여 프로그래밍 방식으로이 작업을 수행 할 수 있습니다.
더 긴 대답은 OnItemSelectedListener.onItemSelected()에 의존 할 때 매우 신중해야한다는 것입니다. 예전 선택과 새로운 선택이 같은 위치에 있으면 호출되지 않기 때문입니다. Spinner.getSelectedItemPosition(), 즉, 항목을 즉시 제거하는 경우 실제로 ArrayAdapter의 항목 수보다 큰 위치를 반환 할 수 있기 때문입니다.
나는 3 개의 계단식 스피너로 구성된 시스템을 가지고 있으며, 차례로 다른 버튼과 텍스트의 내용을 구동 할 수 있습니다. 위의 내용을 인식하고 권위 있고 무엇이 아닌지에 대한 내 견해를 바꿀 때까지는 95 %의 해결책을 얻을 수있었습니다. Spinner가 내용을 결정하는 논리에 종속되도록 만들었습니다. 따라서 setSelection()을 호출하고 onItemSelected() 콜백에 의존하는 대신 모든 연쇄 논리를 처리기 외부에서 수행 한 다음 setSelection()을 호출하고 체인을 백업합니다. 여기 작은 내용을 떠 났어요
class Spinster extends Activity {
...
private void setSpinnerOne(int pos) {
// 1. Do our own chores, etc
doSomeStuff();
mSomeText.setText("Blah!");
mSomeButton.setEnabled(some_condition);
// 2. Populate dependent Spinner based on pos
populateSpinnerTwoAdapter(pos);
// 3. Cascade by calling SpinnerTwo logic (not the Spinner itself)
lSpinnerTwoPos = someNiceFunction();
setSpinnerTwo(lSpinnerTwoPos);
// 4. Now set SpinnerOne
mSpinnerTwo.setSelection(pos);
}
private void setSpinnerTwo(int pos) {
// Follows the same pattern as setSpinnerOne(), but cascades to SpinnerThree
}
private void setSpinnerThree(int pos) {
// Follows the same pattern as setSpinnerOne(), but need not cascade
}
...
private OnItemSelectedListener item_select = new OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View v, int position, long id)
{
...
int lId = parent.getId();
if (lId == R.id.spinner_one) {
setSpinnerOne(position);
} else if (lId == R.id.spinner_two) {
setSpinnerTwo(position);
} else if (lId == R.id.spinner_three) {
setSpinnerThree(position);
}
}
}
}
, 그 방법을 설정하고)합니다 (setSpinner의 *에서 가드 변수를 삭제의 그들이 무엇을 귀찮게하지 않도록 :
내 작업 코드에서 적응 onSelectedItemListener()가 다시 호출 할 때 모든 작업이 다시 수행됩니다. 기본 논리를 버리면 쉽게 표시 할 수 있다고 생각합니다. (그리고 그들은하지 엄격가 필요 -. onItemSelected()가 두 번째 라운드 호출되지 않습니다)이이 추상적으로 간주되는 경우 내가 진짜, 작업 예제를 게시 할 수.
- 1. 스피너의 모델
- 2. 스피너의 크기를 설정하는 방법
- 3. 메뉴와 스피너의 위치에 대해!
- 4. 데이터베이스에 스피너의 데이터를 삽입하십시오
- 5. 닫힌 스피너의 텍스트 색
- 6. 스피너의 선택한 항목을 어떻게 저장하고 다른 클래스에서 사용할 수 있습니까?
- 7. 누름 버튼 스피너의 선택에 따라 다른 .MP3를 재생
- 8. 스피너의 텍스트 크기와 방향을 변경하는 방법
- 9. 다른 gridview의 선택된 행을 기반으로 gridview를 동적으로 채우는 방법은 무엇입니까?
- 10. MVC3.0의 HTML.Dropdownlistfor에서 선택된 값을 채우는 다른 방법
- 11. 상자가로드되면 jQuery는 옵션 상자에서 선택된 값을 설정합니다.
- 12. CardLayout에있는 다른 카드의 입력을 기반으로 한 카드의 (JPanel) 내용을 업데이트합니다.
- 13. 다른 유형의 다른 목록의 내용을 기반으로 목록을 필터링하는 방법?
- 14. 동적으로 WCF 끝점을 설정합니다.
- 15. 람다 식 - 컬렉션의 다른 속성 값을 기반으로 개체 컬렉션에서 하나의 속성 값을 설정합니다.
- 16. 다른 열을 기반으로 한 열 곱하기
- 17. 다른 ObjectDataSource를 기반으로 한 ObjectDataSource의 반환 값을 설정하는 방법
- 18. 다른 배열의 병렬 값을 기반으로 한 배열의 데이터를 그룹화하려면 어떻게해야합니까?
- 19. plsql은 다른 테이블의 값 합계를 기반으로 한 테이블 값을 업데이트합니다.
- 20. 다른 폼 값을 기반으로 다른 폼을 열고 싶습니다.
- 21. 동적으로 다른 클래스의 새 객체 만들기?
- 22. 자바에서 다른 클래스의 값을 얻는 방법
- 23. 다른 값을 기반으로 PHP에서 배열 정렬
- 24. 다른 값을 기반으로 CSS 값 설정
- 25. XPath : 다른 노드 값을 기반으로 노드 선택
- 26. MySQL은 GEO 위치를 기반으로 다른 값을 반환합니까?
- 27. 다른 테이블의 값을 기반으로 업데이트 필드
- 28. TortoiseSVN : 한 지점의 내용을 다른 지점으로 복사
- 29. 한 테이블의 내용을 다른 테이블로 복사
- 30. 한 커서의 내용을 다른 커서에 추가하십시오.