我已经查看了其他问题,但没有一个答案适合我。
我在尝试给RecyclerView充气时遇到的错误是:
E / RecyclerView:没有连接适配器;跳过布局
这是我尝试向我的RecyclerView充气的ArrayList的一个Example-Item:
//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" />
...
这是我到目前为止所尝试的:
不知道我还能做些什么。我很感激一些帮助。
修改
我真的不知道它是否有用,但我在创建项目时使用了导航抽屉预设,并且我在我创建的类中添加了此代码,并将布局设置为R.layout.content_drawer
。
此外,在调试时我没有从调试器获得任何结果,这是一个Image:
答案 0 :(得分:1)
尝试将 RecyclerView 高度设为“match_parent”,然后查看输出是否有效。
答案 1 :(得分: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);
答案 2 :(得分:1)
它没有显示,因为您试图在 onCreate 方法中对RecyclerView进行充气。请将您的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);
答案 3 :(得分: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" />
答案 4 :(得分:0)
我设法解决了这个问题。实际上问题非常明显,但在撰写问题时我并没有完全理解它。
我只是创建了另一个活动,并将布局设置为content_drawer。这是错误的,因为所有代码都需要放在Drawer.class
中(如果您在Android Studio中使用导航抽屉预设)。
这就是调试器没有显示任何内容的原因,因为它根本没有进入那个类。而且因为代码从未运行过,当然它无法显示任何内容。
感谢我得到的答案。