2015-08-02 2 views
1

Я получил ошибку «Без адаптера, пропуская макет» в логарифме. Но, кажется, нет проблем при отображении его на моем телефоне. Мне хотелось бы знать, что вызывает ошибку.RecyclerView: адаптер не подключен; пропуская макет

Спасибо заранее.

OnCreate метод:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_appbar); 
    context=this; 

    toolbar=(Toolbar) findViewById(R.id.app_bar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    NavFragment drawerFragment = (NavFragment) 
      getSupportFragmentManager().findFragmentById(R.id.nav_frag); 
    drawerFragment.setUp(R.id.nav_frag, (DrawerLayout) findViewById(R.id.drawerLayout), toolbar); 
    listEvents= new ArrayList<>(); 



    Parse.enableLocalDatastore(this); 
    Parse.initialize(this, "xxxxxxxxxx", "xxxxxxxxxxx"); 

    //TEST PARSE 

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Test"); 
    //query.whereEqualTo("playerName", "Dan Stemkoski"); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> eventList, ParseException e) { 
      if (e == null) { 
       Log.d("Events", "Retrieved " + eventList.size() + " Events"); 

       for (int i = 0; i < eventList.size(); i++) { 

        Events events = new Events(); 
        events.setTitle((String) eventList.get(i).get("teststr")); 
        events.setId(String.valueOf(eventList.get(i).get("teststr"))); 
        listEvents.add(events); 
       } 
       eventAdapter= new EventAdapter(context); 
       eventAdapter.setEventList(listEvents); 
       eventsList.setAdapter(eventAdapter); 
      } else { 
       Log.d("score", "Error: " + e.getMessage()); 
      } 
     } 
    }); 


    eventsList=(RecyclerView)findViewById(R.id.list_events); 
    eventsList.setLayoutManager(new LinearLayoutManager(this)); 



} 

EventAdapter:

public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolderEvents> { 
    private LayoutInflater layoutInflater; 
    private ArrayList<Events> listEvents= new ArrayList<>(); 
    public EventAdapter(Context context){ 
     layoutInflater=LayoutInflater.from(context); 
    } 

    public void setEventList(ArrayList<Events> listEvents){ 
     this.listEvents=listEvents; 
     notifyItemRangeChanged(0,listEvents.size()); 
    } 

    @Override 
    public ViewHolderEvents onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view=layoutInflater.inflate(R.layout.custom_event_row,viewGroup,false); 
     ViewHolderEvents viewHolder =new ViewHolderEvents(view); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolderEvents viewHolderEvents, int i) { 
     Events currentEvent= listEvents.get(i); 
     viewHolderEvents.title.setText(currentEvent.getTitle()); 
     viewHolderEvents.id.setText(currentEvent.getId()); 

    } 

    @Override 
    public int getItemCount() { 
     return listEvents.size(); 
    } 

    static class ViewHolderEvents extends RecyclerView.ViewHolder{ 
     private TextView title; 
     private TextView id; 

     public ViewHolderEvents(View itemView) { 
      super(itemView); 
      title=(TextView)itemView.findViewById(R.id.title); 
      id=(TextView)itemView.findViewById(R.id.description); 
     } 
    } 

} 

activity_main_appbar:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<include 
    android:id="@+id/app_bar" 
    layout="@layout/app_bar" /> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawerLayout" 

    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <android.support.v7.widget.RecyclerView 
      android:id="@+id/list_events" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent"/> 

    </FrameLayout> 
    <fragment 
     android:id="@+id/nav_frag" 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:layout="@layout/fragment_nav" 
     android:name="com.squaredbytes.eventlane.NavFragment" 
     tools:layout="@layout/fragment_nav" /> 

</android.support.v4.widget.DrawerLayout> 

Logcat:

08-02 14:52:51.344 15877-15932/com.squaredbytes.eventlane I/OpenGLRenderer﹕ Initialized EGL, version 1.4 
08-02 14:52:51.456 15877-15932/com.squaredbytes.eventlane D/OpenGLRenderer﹕ Enabling debug mode 0 
08-02 14:52:51.486 15877-15877/com.squaredbytes.eventlane E/RecyclerView﹕ No adapter attached; skipping layout 
08-02 14:52:51.615 15877-15877/com.squaredbytes.eventlane E/RecyclerView﹕ No adapter attached; skipping layout 
08-02 14:52:53.521 15877-15877/com.squaredbytes.eventlane D/Events﹕ Retrieved 4 Events 
08-02 14:57:41.831 15877-15888/com.squaredbytes.eventlane W/art﹕ Suspending all threads took: 8.652ms 
+0

ваше приложение разбивается? если да, вы можете опубликовать подробный отчет logcat – Samir

+0

его не сбой. но я беспокоюсь о том, что «нет адаптера, пропуская макет» в logcat .. вы можете объяснить причину этого. –

ответ

1

Это потому, что вы подключаете адаптер к RecyclerView позже. Сначала вы можете установить пустой адаптер, а затем занести данные в адаптер позже, когда будут извлечены данные.

Вы можете посмотреть SH. ответ here для справки.

0

У меня была эта же самая точная проблема, и я попробовал все ответы об этом. Затем я пошел на обед и включил обратно мой компьютер. И эта ошибка больше не появлялась. Может быть, перезапуск ПК может решить проблему?