Android的微调适配器和棒棒糖 [英] Android Spinner Adapters and Lollipop
问题描述
很多人一样,我在我的Android应用程序中使用Parse.com。当我使用一个ParseQueryAdapter的片段来检索数据并把它传递给一个微调
java.lang.IllegalArgumentException异常:微调适配器视图类型数必须为1
和应用程序崩溃。
我已经寻找修复,我知道这是parse.com而不是我要解决的问题。但是,我真想让我的应用程序看起来材料设计,如果我的应用程序targetSdkVersion 19的状态栏始终为黑色。
有针对此问题,我不知道答案,我可以直接在的问题,因为我没有特权不问。这个社区建议延长parseadapter和@覆盖的getViewTypeCount这个code 。我在Android的一个新手,我不知道如何正确地遵循这一建议。我将AP preciate如果你们帮我这个。
更新:
我按照<一的code href=\"http://stackoverflow.com/questions/30283189/spinner-adapter-issue-in-android-5-0/30283548#30283548\">this回答,但一个错误说 MyParseAdapter没有类型参数
。
你能解释一下我,我做错了什么?
感谢
编辑:
公共无效addItemsOnSpinner(){ //实例一QueryFactory定义ParseQuery用于在此获取的项目
//适配器。
MyParseAdapter.QueryFactory&LT;&的parseObject GT;厂=
新MyParseAdapter.QueryFactory&LT;&的parseObject GT;(){
公共ParseQuery创建(){
ParseQuery查询=新ParseQuery(书);
//query.whereEqualTo(\"activated,真正的);
query.orderByAscending(称号);
返回查询;
}
}; //合格出厂到ParseQueryAdapter的构造。
ParseQueryAdapter&LT;&的parseObject GT;适配器=新MyParseAdapter&LT;&的parseObject GT;(getActivity(),厂);
adapter.setTextKey(称号);
/ * //也许在设置了一组新的ParseObjects成功加载到被解雇的回调。
adapter.addOnQueryLoadListener(新OnQueryLoadListener&LT;&的parseObject GT;(){
公共无效onLoading(){
//触发任何加载UI
} 公共无效onLoaded(列表&LT;&的parseObject GT;对象,ParseException的E){
//执行任何负载后的逻辑,隐藏装载UI
}
}); * / spinnerBook.setPopupBackgroundResource(R.drawable.spinner_style);
spinnerBook.setAdapter(适配器); spinnerBook.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener(){
公共无效onItemSelected(适配器视图&LT;&GT;母公司,观景,INT POS,长ID){ Toast.makeText(parent.getContext(),
OnItemSelectedListener:+ parent.getItemAtPosition(POS)的ToString()
Toast.LENGTH_SHORT).show();
// Log.d(测试,spinnerBook.getSelectedItem()的toString());
// Log.d(test2的parent.getItemAtPosition(POS)的ToString());
的parseObject项目=(的parseObject)parent.getAdapter()的getItem(POS)。
。OBJECTID = item.getObjectId()的toString(); //Log.d(\"test3\",objectID); ParseQuery&LT;&的parseObject GT;查询= ParseQuery.getQuery(书);
query.getInBackground(OBJECTID,新GetCallback&LT;&的parseObject GT;(){
公共无效做过(的parseObject对象,ParseException的E){
如果(E == NULL){
//对象将是你的游戏得分
BOOKTITLE = object.getString(标题);
txtBookAuthor.setText(object.getString(作家));
txtBookISBN.setText(object.getString(国际标准书号));
//类= object.getString(类);
}其他{
// 出了些问题
}
}
});
} 公共无效onNothingSelected(适配器视图&LT;&GT;为arg0){ }
});}
这是我如何解决了这个问题。
首先我创建了一个新的类像这样
公共类MyParseAdapter扩展ParseQueryAdapter&LT;&的parseObject GT; { 公共MyParseAdapter(上下文的背景下,QueryFactory&LT;&的parseObject GT; clazz所){
超(背景下,clazz所);
} @覆盖
公众诠释getViewTypeCount(){
返回1;
}
}
和我更换一次ParseQueryAdapter与MyParseAdapter
就连声明
试试这个
公共无效addItemsOnSpinner(){ //实例一QueryFactory定义ParseQuery用于在此获取的项目
//适配器。
MyParseAdapter.QueryFactory&LT;&的parseObject GT;厂=
新MyParseAdapter.QueryFactory&LT;&的parseObject GT;(){
公共ParseQuery创建(){
ParseQuery查询=新ParseQuery(书);
//query.whereEqualTo(\"activated,真正的);
query.orderByAscending(称号);
返回查询;
}
}; //合格出厂到ParseQueryAdapter的构造。
MyParseAdapter适配器=新MyParseAdapter(getActivity(),厂);
adapter.setTextKey(称号);
/ * //也许在设置了一组新的ParseObjects成功加载到被解雇的回调。
adapter.addOnQueryLoadListener(新OnQueryLoadListener&LT;&的parseObject GT;(){
公共无效onLoading(){
//触发任何加载UI
} 公共无效onLoaded(列表&LT;&的parseObject GT;对象,ParseException的E){
//执行任何负载后的逻辑,隐藏装载UI
}
}); * / spinnerBook.setPopupBackgroundResource(R.drawable.spinner_style);
spinnerBook.setAdapter(适配器); spinnerBook.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener(){
公共无效onItemSelected(适配器视图&LT;&GT;母公司,观景,INT POS,长ID){ Toast.makeText(parent.getContext(),
OnItemSelectedListener:+ parent.getItemAtPosition(POS)的ToString()
Toast.LENGTH_SHORT).show();
// Log.d(测试,spinnerBook.getSelectedItem()的toString());
// Log.d(test2的parent.getItemAtPosition(POS)的ToString());
的parseObject项目=(的parseObject)parent.getAdapter()的getItem(POS)。
。OBJECTID = item.getObjectId()的toString(); //Log.d(\"test3\",objectID); ParseQuery&LT;&的parseObject GT;查询= ParseQuery.getQuery(书);
query.getInBackground(OBJECTID,新GetCallback&LT;&的parseObject GT;(){
公共无效做过(的parseObject对象,ParseException的E){
如果(E == NULL){
//对象将是你的游戏得分
BOOKTITLE = object.getString(标题);
txtBookAuthor.setText(object.getString(作家));
txtBookISBN.setText(object.getString(国际标准书号));
//类= object.getString(类);
}其他{
// 出了些问题
}
}
});
} 公共无效onNothingSelected(适配器视图&LT;&GT;为arg0){ }
});}
Like many others, I'm using Parse.com in my android application. When I use a ParseQueryAdapter in a fragment to retrieve data and pass it to a spinner a
java.lang.IllegalArgumentException: Spinner adapter view type count must be 1
and the application crash.
I have searched for a fix and I know that this is a problem that parse.com and not me have to resolve. But, I really want to make my app looks Material Design and if my app targetSdkVersion 19 the status bar is always black.
There is an answer for this problem that I don't understand and I can't ask directly in the question because I don't have privileges. A member of this community suggest to extend the parseadapter and @override the getViewTypeCount with this code. I'm a newbie in Android and I don't know how to properly follow that suggestion. I will appreciate if you guys help me with this.
Update:
I'm following the code in this answer, but an error says MyParseAdapter does not have type parameters
.
Can you explain me what I'm doing wrong ?
Thanks
EDIT:
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) {
}
});
}
this is how i solved the problem
first i created a new class like this
public class MyParseAdapter extends ParseQueryAdapter<ParseObject> {
public MyParseAdapter(Context context, QueryFactory<ParseObject> clazz) {
super(context, clazz);
}
@Override
public int getViewTypeCount() {
return 1;
}
}
and i replaced every ParseQueryAdapter with MyParseAdapter even the declaration
try this
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) {
}
});
}
这篇关于Android的微调适配器和棒棒糖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!