Адаптеры 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) {
}
});
}