从spinner onItemSelected更改spinner选项

3

我在页面顶部放置了一个旋转器,用于显示圣经书籍。当选择一本书时,我会查询该书有多少章,并将其放入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);这一行,问题出在上下文。我尝试过以下选项:thisrootViewgetContext()getActivity(),但是我一直收到以下错误信息:error: no suitable constructor found for ArrayAdapter(Context,Spinner,List<String>)。没有一个是需要的选项,我错在哪里了?

你尝试过这样吗:- 私有活动活动; 并在setContentView下面 - --> 活动 = this; - Rajshree Tiwari
4个回答

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


尝试使用android.R.layout.simple_spinner_item - Aiko West
1
看起来不错!所以解决方案是:ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, newChapters); - 谢谢! - Chud37

1
在代码 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" />

1

你的尝试是错误的。

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

您正在传递 spinner 对象,而不是 布局资源ID。尝试以下代码,它可能适用于您。
ArrayAdapter<String> adapter=new ArrayAdapter<String>(context,R.layout.support_simple_spinner_dropdown_item,newChapters);

0
请尝试在ArrayAdapterConstructor中使用getActivity()而不是getContext()
 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), bibleBooks, newChapters);
                    bibleBooks.setAdapter(arrayAdapter);

希望这可以帮到你


好的,抱歉我没有仔细阅读。我认为你的第二个参数是错误的,你应该提供资源ID,例如android.R.layout.simple_spinner_item - Sukhbir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接