Android的微调适配器和棒棒糖 [英] Android Spinner Adapters and Lollipop

查看:350
本文介绍了Android的微调适配器和棒棒糖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很多人一样,我在我的Andr​​oid应用程序中使用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,长I​​D){            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,长I​​D){            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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆