2016-07-04 44 views
2

我有我的ChordsListActivity,看起來像這樣:的Android - ArrayList和RecycleView.Adapter

public class ChordsListActivity extends Activity { 
private RecyclerView chordsList; 
private RecyclerView.LayoutManager listLayoutManager; 

private ArrayList<Accordo> getChords() { 
    ArrayList<Accordo> chords = new ArrayList<>(); 

    Accordo a=new Accordo(); 
    a.setName("Do maggiore"); 
    a.setNote("Do, Mi, Sol"); 
    a.setImage(R.drawable.do_maggiore); 
    chords.add(a); 

    a=new Accordo(); 
    a.setName("do 5"); 
    a.setNote("na, na, na"); 
    a.setImage(R.drawable.do5); 
    chords.add(a); 

    return chords; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chords_list); 

    chordsList = (RecyclerView) findViewById(R.id.chords_recycler); 

    //use a linear layout manager 
    listLayoutManager = new LinearLayoutManager(this); 
    chordsList.setLayoutManager(listLayoutManager); 

    ChordsListAdapter adapter = new ChordsListAdapter(this, getChords()); 

    /** start SearchActivity when ImageButton is pressed */ 
    ImageButton cerca = (ImageButton) findViewById(R.id.search); 
    cerca.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), SearchActivity.class); 

      ArrayList<Accordo> chords = new ArrayList<Accordo>(); 
      intent.putExtra("chords", chords); 


      startActivity(intent); 
     } 
    }); 

} 
} 

有在這條線的錯誤:

ChordsListAdapter adapter = new ChordsListAdapter(this, getChords()); 

這是錯誤:

Error:(126, 38) error: constructor ChordsListAdapter in class ChordsListAdapter cannot be applied to given types; required: ArrayList found: ChordsListActivity,ArrayList reason: actual and formal argument lists differ in length

這是我的ChordsListAdapter

public class ChordsListAdapter extends RecyclerView.Adapter<ChordsListAdapter.MyViewHolder> { 
private ArrayList<Accordo> chordsList; 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView nome, note; 
    public ImageView immagine; 

    public MyViewHolder(View view) { 
     super(view); 
     nome = (TextView) view.findViewById(R.id.nome); 
     note = (TextView) view.findViewById(R.id.note); 
     immagine = (ImageView) view.findViewById(R.id.immagine_accordo); 
    } 
} 

public ChordsListAdapter(ArrayList<Accordo> chordsList) { 
    this.chordsList = chordsList; 
} 

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

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position){ 
    Accordo chord = chordsList.get(position); 
    holder.nome.setText(chord.getNome()); 
    holder.note.setText(chord.getNote()); 
    holder.immagine.setImageResource(chord.getImage()); 
} 

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

你能幫我弄清楚問題是什麼以及如何解決它?

+0

你可以發佈getChords()方法的代碼 –

+0

@DeepanshuGandhi已經存在,它的方法返回你正在傳遞的ChordsListActivity – Daniele

+0

中的ArrayList(this,getChords())兩個參數,並且你有1個參數的構造函數 –

回答

2

此行

ChordsListAdapter adapter = new ChordsListAdapter(this, getChords()); 

是調用您的ChordsListAdapter的構造函數,看起來像這樣在你ChordsListAdapter.class

public ChordsListAdapter(ArrayList<Accordo> chordsList) { 
    this.chordsList = chordsList; 
} 

要麼你就需要改變你的構造函數接受ContextActivity

public ChordsListAdapter(Context context, ArrayList<Accordo> chordsList) { 
    this.chordsList = chordsList; 
} 

,或者你可以刪除調用的第一個參數:

ChordsListAdapter adapter = new ChordsListAdapter(getChords()); 
+0

謝謝!很好的回答!即使我試圖運行它時,我的回收視圖仍然看起來是空的。你知道我該如何解決這個問題嗎? – Daniele

+0

這似乎是另一個問題的問題,因爲到目前爲止我看不到代碼存在問題;)可能的原因:您的'xml'(活動佈局,行佈局)編碼不正確。 – yennsarah

+0

奇怪的...錯誤必須在那裏,因爲我的類只有這兩個和我的XML佈局用於改變我的ArrayList之前工作 – Daniele

1

你只有一個構造函數

public ChordsListAdapter(ArrayList<Accordo> chordsList) { 
    this.chordsList = chordsList; 
} 

它不具有活動作爲參數,所以你必須改變你創建你的適配器這樣的方式:

ChordsListAdapter adapter = new ChordsListAdapter(getChords()); 
0

你只有一個構造函數

ChordsListAdapter adapter = new ChordsListAdapter(this, getChords()); 

public ChordsListAdapter(ArrayList<Accordo> chordsList) { 
    this.chordsList = chordsList; 
} 

它不具有活動作爲參數,所以你必須更改適配器,如下所示:

ChordsListAdapter adapter = new ChordsListAdapter(getChords());