Android - ArrayList 和 RecycleView.Adapter
Android - ArrayList and RecycleView.Adapter
我的 ChordsListActivity
看起来像这样:
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();
}
}
你能帮我找出问题所在以及如何解决吗?
你只有一个构造函数
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
它没有 activity 作为参数,因此您必须像这样更改创建适配器的方式:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());
这一行
ChordsListAdapter adapter = new ChordsListAdapter(this, getChords());
是对您 ChordsListAdapter
的构造函数的调用,在您 ChordsListAdapter.class
中看起来像这样:
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
您需要更改构造函数以接受 Context
或 Activity
。
public ChordsListAdapter(Context context, ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
或者您可以删除调用中的第一个参数:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());
你只有一个构造函数
ChordsListAdapter adapter = new ChordsListAdapter(this, getChords());
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
它没有 activity 作为参数,因此您必须像下面这样更改适配器:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());
我的 ChordsListActivity
看起来像这样:
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();
}
}
你能帮我找出问题所在以及如何解决吗?
你只有一个构造函数
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
它没有 activity 作为参数,因此您必须像这样更改创建适配器的方式:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());
这一行
ChordsListAdapter adapter = new ChordsListAdapter(this, getChords());
是对您 ChordsListAdapter
的构造函数的调用,在您 ChordsListAdapter.class
中看起来像这样:
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
您需要更改构造函数以接受 Context
或 Activity
。
public ChordsListAdapter(Context context, ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
或者您可以删除调用中的第一个参数:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());
你只有一个构造函数
ChordsListAdapter adapter = new ChordsListAdapter(this, getChords());
public ChordsListAdapter(ArrayList<Accordo> chordsList) {
this.chordsList = chordsList;
}
它没有 activity 作为参数,因此您必须像下面这样更改适配器:
ChordsListAdapter adapter = new ChordsListAdapter(getChords());