방향 변경시 선택한 스피너 / 드롭 다운 항목의 상태를 유지하려면 어떻게합니까?

user2386226

내 코드에서 스피너 드롭 다운을 사용하고 있는데, 동적으로 채워지는 값이 4 ~ 5 개 있습니다. 예를 들어 "사과"를 기본값으로 설정하고 드롭 다운에서 "주황색"을 선택하고 화면을 세로에서 가로로 회전하면 연결된보기와 함께 기본 "사과"로 돌아갑니다. "주황색"을 선택하고 가로로 회전 할 때 선택한 값을 채우거나 동일한 선택된 상태를 유지하고보기를 유지하도록 상태를 저장하는 방법 선택한 값에 해당하는 세로 모드에서 선택한보기를 그대로 / 채 웁니다. 동일한 용도로 사용하는 어댑터 코드는 다음과 같습니다.

public class MarketsSpinnerAdapter extends CustomRowAdapter<AdapterRow> {


    private List<AdapterRow> mRenderList;

    public MarketsSpinnerAdapter(final Context context, final List<AdapterRow> renderList) {
        super(context);


        mRenderList = new ArrayList<AdapterRow>();
        mRenderList.addAll(renderList);
    }

    @Override
    protected void setEntries(final List<AdapterRow> renderList) {
        mRenderList = renderList;
    }

    @Override
    protected List<AdapterRow> getEntries() {
        return mRenderList;
    }

    @Override
    public View getDropDownView(final int position, final View convertView, final ViewGroup parent) {
        return getEntries().get(position).getDropDownView(mContext, convertView);
    }

}

각 조각에서 해당 사용법 :

 private void populateCategoryRows(final Cursor cursor) {
            mCategories.clear();
            mAllCategories.clear();
            cursor.moveToPosition(-1);
            Map<String, String> categoryParentNames = new HashMap<String, String>();

            int selectedPosition = 0;
            String previousHeader = "";
            String previousAllHeader = "";

            while (cursor.moveToNext()) {
                final int categoryLevel = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.LEVEL));
                final String categoryName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.NAME));
                final String categoryDisplayName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.DISPLAY_NAME));

                if (categoryLevel == 1) {
                    categoryParentNames.put(categoryName, categoryDisplayName);
                }
            }

            cursor.moveToPosition(-1);
            while (cursor.moveToNext()) {
                final int categoryLevel = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.LEVEL));
                final boolean categoryIsDefault = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.IS_DEFAULT)) == 1;
                final boolean categoryIsSelected = cursor.getInt(cursor.getColumnIndex(MarketsCategory.Columns.IS_SELECTED)) == 1;
                final String categoryParent = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.PARENT));
                final String categoryName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.NAME));
                final String categoryDisplayName = cursor.getString(cursor.getColumnIndex(MarketsCategory.Columns.DISPLAY_NAME));


                if (categoryLevel == 2 ) {
                    String categoryParentDisplayName = categoryParentNames.get(categoryParent);
                        if (!categoryParent.equals(previousHeader)) {
                            if (categoryIsSelected) {

                                mCategories.add(new CategoryHeader(categoryParentDisplayName));
                                previousHeader = categoryParent;
                            }
                        }

                        if (!categoryParent.equals(previousAllHeader)) {
                            mAllCategories.add(new CategoryHeader(categoryParentDisplayName));
                            previousAllHeader = categoryParent;
                        }

                        if (categoryIsSelected) {
                            mCategories.add(new SpinnerMarketCategoryRow(categoryName, categoryDisplayName, categoryParent));
                        }
                        mAllCategories.add(new MarketsCategoryCheckableRow(categoryName, categoryDisplayName, categoryIsSelected, categoryIsDefault));

                        if(categoryIsDefault){
                            selectedPosition = mCategories.size()-1;
                        }
                }
            }

            mSpinnerAdapter = new MarketsSpinnerAdapter(Application.getAppContext(), mCategories);
            headerView.setSpinnerAdapter(mSpinnerAdapter);
            headerView.setSpinnerSelectedItemPosition(selectedPosition);
        }
        if (selectedItem instanceof SpinnerMarketCategoryRow) {
            selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position);
        } else {
            if (mSpinnerAdapter.getCount() - 1 >= position + 1) {
                selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position + 1);
            } else {
                selectedCategory = (SpinnerMarketCategoryRow) mSpinnerAdapter.getItem(position - 1);
            }
        }

        final MarketsFragment parentFragment = (MarketsFragment) getParentFragment();
        parentFragment.onCategorySelected(selectedCategory.getCategoryName(), selectedCategory.getCategoryParentName());
    }
@Override
    public void showResults(final Uri uri) {
        LayoutUtils.showResults(getView(), headerView.getSpinnerId());
        headerView.setVisibility(View.VISIBLE);
    }

    @Override
    public void showNoResults(final Uri uri) {
        final MarketsFragment parentFragment = (MarketsFragment) getParentFragment();
        parentFragment.hideSpinner();
        //LayoutUtils.showNoResult(getView(), headerView.getSpinnerId());
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        headerView.setSelected(false);
    }
    @Override
    public void onNothingSelected(IcsAdapterView<?> parent) {
    }

어떤 아이디어?

감사!

umair.ali

다음과 같이 할 수 있습니다.

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("yourSpinner", yourSpinner.getSelectedItemPosition());
    // do this for each or your Spinner
    // You might consider using Bundle.putStringArray() instead
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // initialize all your visual fields        
    if (savedInstanceState != null) {
        yourSpinner.setSelection(savedInstanceState.getInt("yourSpinner", 0));
        // do this for each of your text views
    }
}

도움이 되었기를 바랍니다

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

옵션이 변경되어 페이지를 다시로드해야 할 때 선택한 상태를 유지하려면 어떻게합니까?

분류에서Dev

드롭 다운 목록으로 데이터 소스를 선택하려면 어떻게해야합니까?

분류에서Dev

드롭 다운 상자를 사용하여 스타일 시트를 변경하려면 어떻게합니까?

분류에서Dev

드롭 다운에서 선택한 항목의 텍스트를 변경할 수 있습니까?

분류에서Dev

Android Java-드롭 다운 스피너는 항상 동일한 텍스트를 설정하고 배경색 만 변경하려고합니다.

분류에서Dev

선택한 텍스트와 다른 옵션 텍스트를 드롭 다운 메뉴에 표시하려면 어떻게해야합니까?

분류에서Dev

스피너에서 항목을 선택하고 특정 항목을 선택한 경우 이미지를 어떻게 변경합니까?

분류에서Dev

김프 도구 상자에 포토샵과 같은 드롭 다운 메뉴를 만들려면 어떻게해야합니까? 또한 스플래시 화면의 형식을 어떻게 변경합니까?

분류에서Dev

드롭 다운 메뉴에서 선택한 옵션에 따라 HTML로 텍스트를 표시하려면 어떻게합니까?

분류에서Dev

사용자가 페이지 포스트 백의 드롭 다운에서 항목을 선택하면 즉시 함수를 호출하고 싶습니다. 어떻게해야합니까?

분류에서Dev

자바 스크립트를 사용하여 드롭 다운 항목을 선택하려면 어떻게합니까

분류에서Dev

특정 시간 이상 선택한 경우 Google 시트 드롭 다운 메뉴에서 선택 항목을 제거하는 방법이 있습니까?

분류에서Dev

다른 스피너에서 선택한 스피너의 항목에 따라 데이터를 표시합니까?

분류에서Dev

asp.net의 다른 드롭 다운 상자에서 선택한 후 숨겨진 드롭 다운 상자를 표시하는 방법은 무엇입니까?

분류에서Dev

ajax를 사용하여 다른 드롭 다운 목록에서 선택한 값을 기반으로 드롭 다운 목록의 옵션을 어떻게 변경합니까?

분류에서Dev

버튼 / 드롭 다운 텍스트를 선택한 드롭 다운 항목으로 변경

분류에서Dev

메뉴가 너비를 넘어갈 때 메뉴 드롭 다운의 방향을 어떻게 전환합니까?

분류에서Dev

스피너 메뉴를 대화 스타일의 드롭 다운으로 설정하려면 어떻게해야합니까?

분류에서Dev

드롭 다운 목록에서 값을 선택한 경우 드롭 다운 목록 상자의 내용을 변경하는 방법 1

분류에서Dev

navbar 드롭 다운의 너비를 늘리려면 어떻게합니까?

분류에서Dev

navbar 드롭 다운의 너비를 늘리려면 어떻게합니까?

분류에서Dev

드롭 다운 목록 선택에 따라 여러 텍스트 상자를 채우려면 어떻게합니까?

분류에서Dev

선택한 색상을 색상 드롭 다운 상자에 추가하려면 어떻게해야합니까?

분류에서Dev

태그 이름이 <div> 인 드롭 다운 목록에서 임의의 요소를 선택하려면 어떻게해야합니까?

분류에서Dev

MVC 드롭 다운 목록을 사용하여 양식을 편집하고 드롭 다운에서 데이터를 표시하고 드롭 다운에서 이전에 선택한 항목을 표시하는 방법은 무엇입니까?

분류에서Dev

드롭 다운 목록의 선택한 변경을 처리하는 방법은 무엇입니까?

분류에서Dev

드롭 다운 목록에서 옵션을 선택하면 검색 상자 자리 표시 자 텍스트가 변경되어야합니다.

분류에서Dev

드롭 다운 상자에 두 개의 항목, 선택 불가능한 기본값과 첫 번째 선택 가능한 항목을 표시하는 방법은 무엇입니까?

분류에서Dev

선택한 항목의 ID를 제공하지 않는 2 드롭 다운 선택 컨트롤러 바인딩에 액세스하는 방법

Related 관련 기사

  1. 1

    옵션이 변경되어 페이지를 다시로드해야 할 때 선택한 상태를 유지하려면 어떻게합니까?

  2. 2

    드롭 다운 목록으로 데이터 소스를 선택하려면 어떻게해야합니까?

  3. 3

    드롭 다운 상자를 사용하여 스타일 시트를 변경하려면 어떻게합니까?

  4. 4

    드롭 다운에서 선택한 항목의 텍스트를 변경할 수 있습니까?

  5. 5

    Android Java-드롭 다운 스피너는 항상 동일한 텍스트를 설정하고 배경색 만 변경하려고합니다.

  6. 6

    선택한 텍스트와 다른 옵션 텍스트를 드롭 다운 메뉴에 표시하려면 어떻게해야합니까?

  7. 7

    스피너에서 항목을 선택하고 특정 항목을 선택한 경우 이미지를 어떻게 변경합니까?

  8. 8

    김프 도구 상자에 포토샵과 같은 드롭 다운 메뉴를 만들려면 어떻게해야합니까? 또한 스플래시 화면의 형식을 어떻게 변경합니까?

  9. 9

    드롭 다운 메뉴에서 선택한 옵션에 따라 HTML로 텍스트를 표시하려면 어떻게합니까?

  10. 10

    사용자가 페이지 포스트 백의 드롭 다운에서 항목을 선택하면 즉시 함수를 호출하고 싶습니다. 어떻게해야합니까?

  11. 11

    자바 스크립트를 사용하여 드롭 다운 항목을 선택하려면 어떻게합니까

  12. 12

    특정 시간 이상 선택한 경우 Google 시트 드롭 다운 메뉴에서 선택 항목을 제거하는 방법이 있습니까?

  13. 13

    다른 스피너에서 선택한 스피너의 항목에 따라 데이터를 표시합니까?

  14. 14

    asp.net의 다른 드롭 다운 상자에서 선택한 후 숨겨진 드롭 다운 상자를 표시하는 방법은 무엇입니까?

  15. 15

    ajax를 사용하여 다른 드롭 다운 목록에서 선택한 값을 기반으로 드롭 다운 목록의 옵션을 어떻게 변경합니까?

  16. 16

    버튼 / 드롭 다운 텍스트를 선택한 드롭 다운 항목으로 변경

  17. 17

    메뉴가 너비를 넘어갈 때 메뉴 드롭 다운의 방향을 어떻게 전환합니까?

  18. 18

    스피너 메뉴를 대화 스타일의 드롭 다운으로 설정하려면 어떻게해야합니까?

  19. 19

    드롭 다운 목록에서 값을 선택한 경우 드롭 다운 목록 상자의 내용을 변경하는 방법 1

  20. 20

    navbar 드롭 다운의 너비를 늘리려면 어떻게합니까?

  21. 21

    navbar 드롭 다운의 너비를 늘리려면 어떻게합니까?

  22. 22

    드롭 다운 목록 선택에 따라 여러 텍스트 상자를 채우려면 어떻게합니까?

  23. 23

    선택한 색상을 색상 드롭 다운 상자에 추가하려면 어떻게해야합니까?

  24. 24

    태그 이름이 <div> 인 드롭 다운 목록에서 임의의 요소를 선택하려면 어떻게해야합니까?

  25. 25

    MVC 드롭 다운 목록을 사용하여 양식을 편집하고 드롭 다운에서 데이터를 표시하고 드롭 다운에서 이전에 선택한 항목을 표시하는 방법은 무엇입니까?

  26. 26

    드롭 다운 목록의 선택한 변경을 처리하는 방법은 무엇입니까?

  27. 27

    드롭 다운 목록에서 옵션을 선택하면 검색 상자 자리 표시 자 텍스트가 변경되어야합니다.

  28. 28

    드롭 다운 상자에 두 개의 항목, 선택 불가능한 기본값과 첫 번째 선택 가능한 항목을 표시하는 방법은 무엇입니까?

  29. 29

    선택한 항목의 ID를 제공하지 않는 2 드롭 다운 선택 컨트롤러 바인딩에 액세스하는 방법

뜨겁다태그

보관