代码之家  ›  专栏  ›  技术社区  ›  Chud37

从选定的微调器更改微调器选项

  •  3
  • Chud37  · 技术社区  · 6 年前

    我在上面有一个旋转器,上面有圣经的书。当一本书被选中时,我会找出其中有多少章节并将其放入 Chapters 变量。然后我想更改名为 bible_chapters 根据有多少章。

    public class Find extends Fragment {
    
        private Spinner bibleBooks;
        private Spinner bibleChapters;
        private Spinner bibleVerses;
        private boolean spinnerInitialized;
    
        public Find() {
            // Required empty public constructor
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            final View rootView = inflater.inflate(R.layout.fragment_find, container, false);
            final DatabaseManager databaseAccess = DatabaseManager.getInstance(getActivity());
            final Context con = getContext();
    
            // Spinner Listener
            bibleBooks = rootView.findViewById(R.id.bible_books);
            bibleChapters = rootView.findViewById(R.id.bible_chapters);
    
            bibleBooks.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    if (!spinnerInitialized) {
                        spinnerInitialized = true;
                        return;
                    }
    
                    databaseAccess.open();
                    String book = adapterView.getSelectedItem().toString();
                    int Chapters = databaseAccess.howManyChapters(book);
                    databaseAccess.close();
                    Log.d("Chapters",String.valueOf(Chapters));
                    if(Chapters > 1) {
    
                        List<String> newChapters = new ArrayList<String>();
                        for (int x = 2; x <= Chapters; x++) {
                            newChapters.add("Chapter " + x);
                        }
                        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(con, bibleBooks, newChapters);
                        bibleBooks.setAdapter(arrayAdapter);
                    }
    
                }
                public void onNothingSelected(AdapterView<?> adapterView) {
                    return;
                }
            });
    
    
            // Inflate the layout for this fragment
            return rootView;
        }
    
    }
    

    错误在于 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(con, bibleBooks, newChapters); 行。问题在于上下文。我试过:

    this ,

    rootView ,

    getContext() ,

    getActivity() ,

    我一直得到的错误是: error: no suitable constructor found for ArrayAdapter(Context,Spinner,List<String>)

    它们似乎都不是它要找的东西。我哪里做错了?

    4 回复  |  直到 6 年前
        1
  •  2
  •   Aiko West    6 年前

    例如,在Xamarin.Android中,我总是传递spinnerItem Android.Resource.Layout.SimpleSpinnerItem

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(con, Android.Resource.Layout.SimpleSpinnerItem, newChapters);
    

    而不是“bibleBooks”,这是旋转器本身。

    编辑: 对于Java: android.R.layout.simple_spinner_item

        2
  •  1
  •   UgAr0FF    6 年前

    在代码中 new ArrayAdapter<String>(con, bibleBooks, newChapters), 第二个参数必须是资源id。例如, new ArrayAdapter<String>(con, R.layout.item_spinner, newChapters);

    以及 R.layout.item_spinner :

    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:tools="http://schemas.android.com/tools"
        android:drawableEnd="@drawable/ic_spinner"
        android:drawablePadding="4dp"
        android:drawableRight="@drawable/ic_spinner"
        android:gravity="right"
        android:padding="8dp"
        android:textColor="@color/colorPrimary"
        android:textSize="14dp" />
    
        3
  •  1
  •   Divyesh    6 年前

    你的尝试是错误的。

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(con, bibleBooks, newChapters);
    

    你路过 spinner 对象而不是 layout resource id . 试试下面这对你有用。

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(context,R.layout.support_simple_spinner_dropdown_item,newChapters);
    
        4
  •  0
  •   Sukhbir    6 年前

    请尝试使用 getActivity() 而不是 getContext() 在里面 Constructor 属于 ArrayAdapter

     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), bibleBooks, newChapters);
                        bibleBooks.setAdapter(arrayAdapter);
    

    希望这会有帮助