4

Я пытаюсь реализовать TwoWayView в моем проекте, следуя образцу проекта, представленного в этой ссылке. Я реализовал все, и мой код работает без ошибок, но фактический список не накачивается. После отладки я узнал, что адаптер установлен правильно, и метод getItemCount также возвращает положительное значение, но остальные два переопределенных метода onCreateViewHolder и onBindViewHolder не получают вызова. Я не знаю, почему он не работает. См. Частичный код ниже, любая помощь приветствуется. Благодарю.RecyclerView.Adapter onCreateViewHolder и onBindViewHolder методы не получают вызванные

MyAdapter.java класс

public class MyAdapter extends RecyclerView.Adapter <MyViewHolder> { 

    private MySimpleCursorAdapter mCursor; 
    //some other private fields here 

    public MyAdapter(Context context, Cursor c, int resourceId, ViewType viewType, String containerId) { 
     mCursor = new MySimpleCursorAdapter(a1,a2,a3,a4,a5,a6); //Passed necessary arguments 
     .... 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Log.w("onCreateViewHolder", "--------->executed"); //Line not executed 
     final View view = mCursor.newView(mContext, mCursor.getCursor(), parent); 
     return new MyViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Log.w("onBindViewHolder", "--------->executed"); //Line not executed 
     mCursor.bindView(holder.itemView, mContext, mCursor.getCursor()); 
    } 

    @Override 
    public int getItemCount() { 
     Log.w("count", Integer.toString(mCursor.getCount())); //This is executed 
     return mCursor.getCount(); 
    } 

    private class MySimpleCursorAdapter extends SimpleCursorAdapter { 

     public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
      super(context, layout, c, from, to, flags); 
     } 

     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      View view = mLayoutInflater.inflate(mLayoutToInflate, null); 
      .... 
      return view; 
     } 

     @Override 
     public void bindView(final View view, Context context, Cursor cursor) { 
      //Implemented this method for inflating all subviews inside each item of the list 
     } 
    } 
} 

Примечание: Я прошел через подобные вопросы, но ответы при условии не имеют отношения к моему вопросу, потому что мой RecyclerView не внутри ScrollView, а также getItemCount является возвращая положительное число.

+0

использовать этот адаптер https://gist.github.com/Shywim/127f207e7248fe48400b – pskink

ответ

9

Я думаю, вы забыли setLayoutManager(LayoutManager) на просмотре recycler. Без менеджера макетов вызывается только getItemCount().

Попробуйте с yourRecyclerview.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

+0

Эй, спасибо за ответ, но я не использую по умолчанию _LinearLayoutManager_. Если вы видите пример кода [здесь] (https://github.com/lucasr/twoway-view/blob/master/sample/src/main/java/org/lucasr/twowayview/sample/LayoutFragment.java) (строка 128) он также не использует _setLayoutManager_. – Prudhvi

+0

Итак, вы положили в xml-файл 'app: twowayview_layoutManager =" ListLayoutManager "? (или какой-либо макет-менеджер), например https://github.com/lucasr/twoway-view/blob/master/sample/src/main/res/layout/layout_list.xml#L25 – xiaomi

+0

Да, я поместил это в свой XML-файл , – Prudhvi

0

Во-первых, вы должны сохранить ссылку на контекст, когда адаптер конкретизируется:

public class MyAdapter extends RecyclerView.Adapter <MyViewHolder> { 

private MySimpleCursorAdapter mCursor; 
private Context context; // <-- add this line 
//some other private fields here 

public MyAdapter(Context context, Cursor c, int resourceId, ViewType viewType, String containerId) { 
    mCursor = new MySimpleCursorAdapter(a1,a2,a3,a4,a5,a6); 
    this.context = context; // <-- add this line 
    //Passed necessary arguments 
    .... 
} 

Затем в методе onCreateViewHolder, используйте эту ссылку на контекст, чтобы создать представление для ViewHolder:

public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    Log.w("onCreateViewHolder", "--------->executed"); //Line not executed 
    final View view = mCursor.newView(context, mCursor.getCursor(), parent); 
    return new MyViewHolder(view); 
} 

Затем в CursorAdapter, надуть вид следующим образом:

 public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     View view = LayoutInflater.from(context).inflate(mLayoutToInflate, parent, false); 
     return view; 
    } 

У меня была такая же проблема, хотя я использовал вызов JSON для извлечения данных вместо адаптера курсора, и эти изменения исправили проблему.

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

  • Нет связанных вопросов^_^