Адаптеры Spinner для Android и Lollipop

Как и многие другие, я использую Parse.com в своем приложении для Android. Когда я использую ParseQueryAdapter во фрагменте, чтобы извлечь данные и передать их счетчику

java.lang.IllegalArgumentException: Spinner adapter view type count must be 1

и сбой приложения.

Я искал исправление, и я знаю, что это проблема, которую parse.com, и не я должен решить. Но я действительно хочу, чтобы мое приложение выглядело как Material Design, и если мое приложение targetSdkVersion 19, строка состояния всегда черная.

Есть ответ на эту проблему, который я не понимаю и не могу задать прямо в вопросе, потому что у меня нет привилегий. Член этого сообщества предлагает расширить parseadapter и @ override getViewTypeCount с помощью этого кода. Я новичок в Android, и я не знаю, как правильно следовать этому предложению. Я буду признателен, если вы, ребята, поможете мне с этим.

Обновить:

Я следую за кодом в этом ответе, но ошибка говорит MyParseAdapter does not have type parameters,

Можете ли вы объяснить мне, что я делаю не так?

Спасибо

РЕДАКТИРОВАТЬ:

public void addItemsOnSpinner (){

    // Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
    // Adapter.
    MyParseAdapter.QueryFactory<ParseObject> factory =
            new MyParseAdapter.QueryFactory<ParseObject>() {
                public ParseQuery create() {
                    ParseQuery query = new ParseQuery("Books");
                    //query.whereEqualTo("activated", true);
                    query.orderByAscending("title");
                    return query;
                }
            };

    // Pass the factory into the ParseQueryAdapter's constructor.
    ParseQueryAdapter<ParseObject> adapter = new MyParseAdapter<ParseObject>(getActivity(), factory);


    adapter.setTextKey("title");


   /* // Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
    adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
        public void onLoading() {
            // Trigger any "loading" UI
        }

        public void onLoaded(List<ParseObject> objects, ParseException e) {
            // Execute any post-loading logic, hide "loading" UI
        }
    });*/

    spinnerBook.setPopupBackgroundResource(R.drawable.spinner_style);
    spinnerBook.setAdapter(adapter);

    spinnerBook.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

            Toast.makeText(parent.getContext(),
                    "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
                    Toast.LENGTH_SHORT).show();


            // Log.d("test", spinnerBook.getSelectedItem().toString());
            // Log.d("test2", parent.getItemAtPosition(pos).toString());
            ParseObject item = (ParseObject) parent.getAdapter().getItem(pos);
            objectID = item.getObjectId().toString();

            //Log.d("test3",objectID);

            ParseQuery<ParseObject> query = ParseQuery.getQuery("Books");
            query.getInBackground(objectID, new GetCallback<ParseObject>() {
                public void done(ParseObject object, ParseException e) {
                    if (e == null) {
                        // object will be your game score
                        bookTitle = object.getString("title");
                        txtBookAuthor.setText(object.getString("author"));
                        txtBookISBN.setText(object.getString("isbn"));
                        //  category = object.getString("category");
                    } else {
                        // something went wrong
                    }
                }
            });
        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });

}

1 ответ

Решение

Вот как я решил проблему

Сначала я создал новый класс, как это

public class MyParseAdapter extends ParseQueryAdapter<ParseObject> {

    public MyParseAdapter(Context context, QueryFactory<ParseObject> clazz) {
        super(context, clazz);
    }

    @Override
    public int getViewTypeCount() {
        return 1;
    }
}

и я заменил каждый ParseQueryAdapter на MyParseAdapter, даже объявление

попробуй это

public void addItemsOnSpinner (){

    // Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
    // Adapter.
    MyParseAdapter.QueryFactory<ParseObject> factory =
            new MyParseAdapter.QueryFactory<ParseObject>() {
                public ParseQuery create() {
                    ParseQuery query = new ParseQuery("Books");
                    //query.whereEqualTo("activated", true);
                    query.orderByAscending("title");
                    return query;
                }
            };

    // Pass the factory into the ParseQueryAdapter's constructor.
    MyParseAdapter adapter = new MyParseAdapter(getActivity(), factory);


    adapter.setTextKey("title");


   /* // Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
    adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
        public void onLoading() {
            // Trigger any "loading" UI
        }

        public void onLoaded(List<ParseObject> objects, ParseException e) {
            // Execute any post-loading logic, hide "loading" UI
        }
    });*/

    spinnerBook.setPopupBackgroundResource(R.drawable.spinner_style);
    spinnerBook.setAdapter(adapter);

    spinnerBook.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

            Toast.makeText(parent.getContext(),
                    "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
                    Toast.LENGTH_SHORT).show();


            // Log.d("test", spinnerBook.getSelectedItem().toString());
            // Log.d("test2", parent.getItemAtPosition(pos).toString());
            ParseObject item = (ParseObject) parent.getAdapter().getItem(pos);
            objectID = item.getObjectId().toString();

            //Log.d("test3",objectID);

            ParseQuery<ParseObject> query = ParseQuery.getQuery("Books");
            query.getInBackground(objectID, new GetCallback<ParseObject>() {
                public void done(ParseObject object, ParseException e) {
                    if (e == null) {
                        // object will be your game score
                        bookTitle = object.getString("title");
                        txtBookAuthor.setText(object.getString("author"));
                        txtBookISBN.setText(object.getString("isbn"));
                        //  category = object.getString("category");
                    } else {
                        // something went wrong
                    }
                }
            });
        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });

}
Другие вопросы по тегам