从Spinner onItemSelected更改Spinner选项

时间:2018-08-01 09:43:32

标签: android spinner android-studio-3.0

我在上面有一个微调器,显示圣经的书。选择一本书后,我将找出其中的章节并将其放入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 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:1)

在代码NSURL *selectedURL = FIFinderSyncController.defaultController.selectedItemURLs[0]; NSURL *fileURL = selectedURL.filePathURL; if([fileURL.pathExtension isEqualToString:@"zip"]) { NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; NSMenuItem *item = [menu addItemWithTitle:@"Hello" action:@selector(itemTarget:) keyEquivalent:@""]; item.target = self; return menu; } 中,第二个参数必须是资源ID。例如,new ArrayAdapter<String>(con, bibleBooks, newChapters),

还有new ArrayAdapter<String>(con, R.layout.item_spinner, newChapters);

R.layout.item_spinner

答案 2 :(得分:1)

您尝试的是错误的。

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);

答案 3 :(得分:0)

请尝试使用getActivity()的{​​{1}}中的getContext()代替Constructor

ArrayAdapter

希望这会有所帮助

相关问题