2016-12-12 5 views
1

Я просмотрел другие вопросы, но ни один из ответов не работал для меня.RecyclerView: адаптер не подключен; пропуская макет в действии

Ошибка я получаю при попытке раздуть RecyclerView является:

E/RecyclerView: адаптер не прилагается; пропуская макет

Это пример-Item для ArrayList Я пытаюсь раздувать в мою RecyclerView:

//Chord Obj: Chord(int images[], String name, Int sound) 

chords.add(new Chord(new int[]{ 
      R.drawable.do_maggiore, R.drawable.do_maggiore_alt1, R.drawable.do_maggiore_alt2, 
      R.drawable.do_maggiore_alt3, R.drawable.do_maggiore_alt4, R.drawable.do_maggiore_alt5, 
      R.drawable.do_maggiore_alt6}, Resources.getSystem().getString(R.string.c), R.raw.do_maggiore)); 

Это мой List_Adapter.java:

public class List_adapter extends RecyclerView.Adapter<List_adapter.MyViewHolder> { 
private ArrayList<Chord> list; 
Context c; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    private TextView name; 
    private ImageView image; 

    private MyViewHolder(View v) { 
     super(v); 
     name = (TextView) v.findViewById(R.id.name); 
     image = (ImageView) v.findViewById(R.id.chord_image); 
    } 
} 

public List_adapter(Context c, ArrayList<Chord> list) { 
    this.list = list; 
    this.c = c; 
} 

@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_row, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override public void onBindViewHolder(MyViewHolder holder, int pos) { 
    Chord chord = list.get(pos); 
    holder.name.setText(chord.getName()); 
    holder.image.setImageResource(chord.getImages()[0]); 
} 

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

Это где я получаю перечислите и заправьте его на мой Main_Activity.onCreate():

/* gets the list */ 
    chords = new ArrayList<>(); 
    ChordsList list = new ChordsList(); 
    list.createList(); 
    chords = list.getList(); 

    /* puts the list into the recyclerView */ 
    recyclerView = (RecyclerView) findViewById(R.id.chords_recycler); 
    recyclerView.setLayoutManager(new LinearLayoutManager(Main_list_activity.this, 
      LinearLayoutManager.VERTICAL, false)); 
    recyclerView.setHasFixedSize(true); 

    final List_adapter adapter = new List_adapter(this, chords); 
    recyclerView.setAdapter(adapter); 

и, наконец, это мой XML:

... 
<android.support.v7.widget.RecyclerView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/chords_recycler" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="25dp" /> 
... 

Это то, что я пытался до сих пор:

  • Проверено, если RecyclerView каким-то усаживается или скрыто. Это не.
  • Добавлены и удалены несколько Элементов из моего списка. Ничего не изменилось.
  • Сначала попытался установить Recycler на пустой адаптер. не повезло.
  • отлаживается и проверяется, был ли список пустым при надувании. Это не.

Не знаю, что еще я мог сделать. Я был бы рад помочь.

EDIT:

Я действительно не знаю, если это полезно, но я использовал панель навигации пресет при создании своего проекта, и я добавляю этот код в классе я создал и установить макет в R.layout.content_drawer.

Кроме того, при отладке я не получаю никакого результата от отладчика здесь является изображение:

debug_image

ответ

0

мне удалось это исправить. Проблема была совершенно очевидной, но я не совсем понял ее при написании вопроса.

Я просто создал другое действие и задал макет как content_drawer. Это неправильно, потому что весь код необходимо поместить в Drawer.class (если вы используете предустановку навигационного ящика в Android Studio).

Вот почему отладчик ничего не показал, потому что он никогда не попадал в этот класс вообще. И поскольку этот код никогда не запускался, конечно, он ничего не мог отобразить.

Спасибо за ответы, которые я получил.

1

Попробуйте сделать свой RecyclerView высоту «match_parent», а затем увидеть результат работает ли он или нет.

+0

Спасибо за ответ. Я уже пробовал это, но не повезло – Daniele

+0

не могли бы вы проверить, что recyclerview не с scrollview. –

1

использовать следующие при установке адаптера: -

List_adapter adapter = new List_adapter(this, chords); 
RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(getActivity()); 
recyclerView.setLayoutManager(mLayoutManager1); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 
recyclerView.setAdapter(adapter); 

вместо

final List_adapter adapter = new List_adapter(this, chords); 
recyclerView.setAdapter(adapter); 
+0

Спасибо за ответ, но этот тоже не сработал – Daniele

+0

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

+0

Что это значит? вы можете увидеть код выше. для меня это выглядит прекрасно, у объекта Chord есть массив изображений, имя String и аудиофайл. И это все, что я определил в классе модели Chord – Daniele

1

Это не показывает, потому что вы пытаетесь раздуть RecyclerView внутри OnCreate метода.Пожалуйста, переместите код RecyclerView в onResume метод вашей деятельности.

/* gets the list */ 
    chords = new ArrayList<>(); 
    ChordsList list = new ChordsList(); 
    list.createList(); 
    chords = list.getList(); 

    /* puts the list into the recyclerView */ 
    recyclerView = (RecyclerView) findViewById(R.id.chords_recycler); 
    recyclerView.setLayoutManager(new LinearLayoutManager(Main_list_activity.this, 
      LinearLayoutManager.VERTICAL, false)); 
    recyclerView.setHasFixedSize(true); 

    final List_adapter adapter = new List_adapter(this, chords); 
    recyclerView.setAdapter(adapter); 
+0

Спасибо, я попробовал. Даже если у меня есть код в onResume(), List не отображает – Daniele

1

Вставьте следующее в своей деятельности:

public class TestActivity extends AppCompatActivity { 
    RecyclerView recyclerView; 
ArrayList<Chord> chords; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     recyclerView = (RecyclerView)findViewById(R.id.recyclerView); 
     setAdapter(); 
    } 
private void setAdapter() { 
    chords = new ArrayList<>(); 

    chords.add(new Chord(new int[]{ 
      R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, 
      R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, 
      R.mipmap.ic_launcher},"Name", R.raw.audio_in_raw)); 


    List_adapter adapter = new List_adapter(chords, this); 
    RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(mLayoutManager1); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.setAdapter(adapter); 

} 

добавить следующее в адаптере:

public class List_adapter extends RecyclerView.Adapter<List_adapter.MyViewHolder> { 

private List<Chord> chord; 
Context context; 
public class MyViewHolder extends RecyclerView.ViewHolder { 
    TextView tvText; 
    ImageView ivImage; 
    public MyViewHolder(View view) { 
     super(view); 
     ivImage= (ImageView) view.findViewById(R.id.ivImage); 

     tvText= (TextView) view.findViewById(R.id.tvText); 
    } 
} 


public List_adapter(List<Chord> chord, Context context) { 
    this.chord = chord; 
    this.context = context; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.customadapter_chords, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) { 


    holder.tvText.setText(chord.get(position).getName()); 
    holder.ivImage.setImageResource(chord.get(position).getImages()[0]); 

} 

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

}

и добавьте следующие адаптер: -

public class Chord { 
int images[]; 
String name; 
int sound; 

public Chord(int[] images, String name, int sound) { 
    this.images = images; 
    this.name = name; 
    this.sound = sound; 

} 

public int[] getImages() { 
    return images; 
} 

public void setImages(int[] images) { 
    this.images = images; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getSound() { 
    return sound; 
} 

public void setSound(int sound) { 
    this.sound = sound; 
} 
} 

и XML является

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="70dp" 
android:weightSum="10" 

> 
<ImageView 
    android:layout_weight="2" 
    android:id="@+id/ivImage" 
    android:layout_width="0dp" 
    android:layout_height="match_parent"></ImageView> 

<TextView 
    android:gravity="center" 
    android:id="@+id/tvText" 
    android:layout_weight="6" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" /> 

+0

, если вы все еще сталкиваетесь с проблемой, тогда дайте мне знать –

+0

еще раз спасибо за помощь. в основном это xml, который изменился. На самом деле у меня есть row.xml, который похож на тот, который вы написали, и именно здесь адаптер помещает изображения и строки, а эта строка - в Recycler. Пожалуйста, посмотрите на отредактированный вопрос, есть ли у вас идея, почему отладчик пуст? – Daniele

+0

есть небольшие изменения в классах адаптеров и моделей ... вы можете скопировать и вставить код в свой код .. тогда вы получите разницу –

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