1

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

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

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

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

Существует ответ на эту проблему, которую я не понимаю, и я не могу напрямую задать вопрос, потому что у меня нет привилегий. Член этого сообщества suggest to extend the parseadapter and @override the getViewTypeCount with this code. Я новичок в Android, и я не знаю, как правильно следовать этому предложению. Буду признателен, если вы, ребята, поможете мне в этом.

Update:

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

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

Благодаря

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) { 

     } 
    }); 

} 
+0

Как об изменении targetSdk до 19? Вы можете сделать это в своем приложении. – torque203

+0

«Но я действительно хочу, чтобы приложение выглядело как Material Design, и если мое приложение targetSdkVersion 19, строка состояния всегда черная». – frankie015

+0

Вы пытались сделать «MyParseAdapter адаптер»? –

ответ

2

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

первый я создал новый класс, как этот

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) { 

     } 
    }); 

} 
Смежные вопросы