[英]Method defined (Android interface) but still not found?
I am following Head first's guide to Android development as a reference and trying to implement a recyclerview with cardview for noodle dishes.我正在按照 Head first 的 Android 开发指南作为参考,并尝试使用 cardview 为面条实现一个 recyclerview。
I am currently implementing the click functionality as an interface separate from the adapter as recommended in the book;我目前正在按照书中的建议将点击功能作为一个独立于适配器的接口来实现; though I am not using fragments at the moment.
虽然我目前没有使用片段。 The one problem is that the method setListener i have defined is not being found by my MainActivity.
一个问题是我的 MainActivity 没有找到我定义的方法 setListener。
The error is "cannot find symbol method setListener()".错误是“找不到符号方法 setListener()”。 So, my method is acting as if it is undefined.
所以,我的方法表现得好像它是未定义的。 Do you know how to why and how to fix this issues?
您知道为什么以及如何解决此问题吗? Here is the code for MainActivity
这是 MainActivity 的代码
package com.justin.android.foodapp;
import androidx.appcompat.app.A
public class MainActivity extends AppCompatActivity {
private Noodles[] noodlesDataset = Noodles.noodles;
private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Log.i("MainActivity", "Hello World");
// get the recycler view
recyclerView = (RecyclerView) findViewById(R.id.noodleRecycler);
// use a linear layout manager
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//specify an adapter
mAdapter = new MyAdapter(noodlesDataset);
recyclerView.setAdapter(mAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(layoutManager);
mAdapter.setListener(new MyAdapter.Listener(){
public void onClick(int position) {
Intent intent = new Intent(MainActivity.this, NoodleDetailActivity.class);
intent.putExtra(NoodleDetailActivity.EXTRA_NOODLE_ID, position);
(MainActivity.this).startActivity(intent);
}
});
}
}
Here is my adapter code, in which i try to define the setListener method这是我的适配器代码,我尝试在其中定义 setListener 方法
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Noodles[] mDataset;
private Listener listener;
interface Listener {
void onClick(int position);
}
// set listener to the implementation of given interface
public void setListener(Listener listener) {
this.listener = listener;
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public TextView textView;
public ImageView imageView;
public MyViewHolder(View v) {
super(v);
cardView = v.findViewById(R.id.card_view);
textView = v.findViewById(R.id.textView);
imageView = v.findViewById(R.id.food_image);
}
}
// contructor; pass the data from Java class Noodles to MyAdapter
public MyAdapter(Noodles[] noodlesDataset) {
mDataset = noodlesDataset;
}
@Override
public int getItemCount() {
return mDataset.length;
}
// create a new ViewHolder and place the views in layout my_text_view inside.
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
final CardView cardView = holder.cardView;
holder.textView.setText(mDataset[position].getName());
holder.imageView.setImageResource(mDataset[position].getImageResourceId());
// when clicked, send an intent from cardview
cardView.setOnClickListener(new View.OnClickListener() {
@Override
// if listener is present, call the implementation of onClick set by the parent
public void onClick(View v) {
if (listener != null) {
listener.onClick(position);
}
}
});
}
}
replace this替换这个
private RecyclerView.Adapter mAdapter;
with和
public MyAdapter mAdapter;
and also remove extra things and update like below并删除额外的东西并更新如下
private RecyclerView recyclerView;
public MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Log.i("MainActivity", "Hello World");
// get the recycler view
recyclerView = (RecyclerView) findViewById(R.id.noodleRecycler);
//specify an adapter
mAdapter = new MyAdapter(noodlesDataset);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setAdapter(mAdapter);
recyclerView.setLayoutManager(layoutManager);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.