2016-02-13 2 views
0

изображения не отображаются. в примере SO, указанном для проверки счетчика в адаптере, но я считаю его правильным. Я получаю эту ошибку в LogCatНе прилагается адаптер; skipping layout recyclerview

No adapter attached; skipping layout recyclerview 

это код mainactivity

RecyclerOkHttpHandler handler = new RecyclerOkHttpHandler(this, new RecyclerOkHttpHandler.MyInterface() { 
     @Override 
     public void myMethod(ArrayList result) { 
      mAdapter = new MyAdapter(result,Search.this); 
      mAdapter.notifyDataSetChanged(); 
      mRecyclerView.setAdapter(mAdapter); 

это мой адаптер

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private ArrayList<Listitem> mDataset; 
    Context mContext; 
    public class ImageViewHolder extends RecyclerView.ViewHolder { 
     //ImageView mImage; 
     public TextView txtHeader; 
     public TextView txtFooter; 
     public ImageView image; 
     public ImageViewHolder(View itemView) { 
      super (itemView); 
      txtHeader = (TextView) itemView.findViewById(R.id.firstLine); 
      txtFooter = (TextView) itemView.findViewById(R.id.secondLine); 
      image = (ImageView) itemView.findViewById(R.id.icon); 
     } 
    } 


    public void add(int position, Listitem item) { //changed from string to listitem 

     mDataset.add(position, item); 
     notifyItemInserted(position); 
    } 

    public void remove(String item) { 
     int position = mDataset.indexOf(item); 
     mDataset.remove(position); 
     notifyItemRemoved(position); 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(ArrayList<Listitem> myDataset, Context context) { 

     mDataset = myDataset; 
     mContext = context; 

    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, 
                 int viewType) { 

      // create a new view 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false); 
      // set the view's size, margins, paddings and layout parameters 
      ImageViewHolder vh = new ImageViewHolder(v); 
      return vh; 
     } 


    private static final int TYPE_IMAGE = 1; 
    private static final int TYPE_GROUP = 2; 

    @Override 
    public int getItemViewType(int position) { 
     // here your custom logic to choose the view type 
     return position; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) { 

       ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder; 
       // viewHolder.txtHeader.setText(...) 
     final Listitem item; 

     // final String name = mDataset.get(position); 
     item = mDataset.get(position); 
     // viewHolder.txtHeader.setText(mDataset.get(position)); 
     viewHolder.txtHeader.setText(mDataset.get(position).getUrl()); 


     Picasso.with(mContext) 
       .load(item.getUrl()) 
       .placeholder(R.drawable.logo) 
       .fit() 
       .noFade() 
       .into(viewHolder.image); 

       /* viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         remove(item); 
        } 
       });*/ 

       // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position)); 

     } 


    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mDataset.size(); 
    } 

} 
+0

Посмотрите на [этот ответ] (http://stackoverflow.com/a/30581896/4224337) – Rami

+0

Это не фатальная ошибка, гораздо больше похоже на предупреждение. –

+0

@MohammedAoufZOUAG хорошо, что он не вошел в класс okhttp – Moudiz

ответ

1

Try для отладки кода и проверить, если myMethod() метод выполняется.

Также не нужно звонить notifyDataSetChanged() при создании адаптера.

public void myMethod(ArrayList result) { 
     mAdapter = new MyAdapter(result,Search.this); 
     mRecyclerView.setAdapter(mAdapter); 
} 
+1

Я должен добавить execute okhttp для доступа к моему интерфейсу – Moudiz

1

ВЫНЬТЕ mAdapter.notifyDataSetChanged() перед установкой Адаптер в следующих строках кода. Вы можете сделать это, как только адаптер установлен для RecyclerView.

@Override 
     public void myMethod(ArrayList result) { 
      mAdapter = new MyAdapter(result,Search.this); 
      mAdapter.notifyDataSetChanged(); 
      mRecyclerView.setAdapter(mAdapter); 
+0

Я сделал то, что вы сказали, и все еще получил ошибку E/RecyclerView: адаптер не подключен; пропуская макет – Moudiz

+0

можете ли вы поместить весь код класса myMethod()? –

+0

Хорошо скажите мне // viewHolder.txtHeader.setText (mDataset.get (position)); прокомментированный код в Adapter работает? Я имею в виду, что текст отображается правильно? В качестве ошибки не подключен адаптер; пропуская макет recyclerview в порядке, поскольку вы не устанавливаете адаптер в onCreate() активности onCreateView() фрагмента, который вы делаете в фоновом потоке. Значит, это предупреждение мне кажется прекрасным. –

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