2016-12-12 43 views
1

佈局我已經看過其他問題,但沒有答案爲我工作。RecyclerView:沒有附加適配器;跳過活動

試圖膨脹RecyclerView時,我得到的錯誤是:

E/RecyclerView:無適配器連接;跳繩佈局

這是一個例子,項目的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設置爲空適配器。沒有運氣。
  • 調試並檢查充氣時列表是否爲空。不是這樣。

不知道我還能做什麼。我會很感激一些幫助。

編輯:

我真的不知道這是否是有用的,但我的創建項目,我在我創建了一個類中添加該代碼和佈局設置爲R.layout.content_drawer當我用抽屜式導航欄預設。

而且調試我不從這裏調試得到任何結果時是一個圖片:

debug_image

回答

0

我設法解決它。這個問題其實很明顯,但在寫這個問題時我並沒有完全理解它。

我只是創建另一個活動,並將佈局設置爲content_drawer。這是錯誤的,因爲所有的代碼都需要放在Drawer.class(如果您正在使用Android Studio中的導航抽屜預設)。

這就是爲什麼調試器什麼都沒有顯示,因爲它從來沒有到過那個類。而且由於該代碼從未運行,當然它不能顯示任何內容。

感謝您收到我的答案。

1

儘量讓你RecyclerView高度「match_parent」,然後看輸出無論它是否有效。

+0

感謝您的回答。我已經嘗試過,但沒有運氣 – Daniele

+0

你可以檢查回滾視圖是不是與滾動視圖。 –

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對象有一個圖像數組,一個名稱字符串和一個音頻文件。這是我在Chord模型類中定義的所有內容 – Daniele

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); 
+0

謝謝,我試過了。即使我在onResume()中的代碼列表不顯示 – 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

在適配器和模型類中也有一些變化......你可以複製和粘貼你的代碼..然後你會得到不同的 –

相關問題