[英]Android: Fragments using a method from MainActivity not defined in the interface?
[英]Method defined (Android interface) but still not found?
我正在按照 Head first 的 Android 开发指南作为参考,并尝试使用 cardview 为面条实现一个 recyclerview。
我目前正在按照书中的建议将点击功能作为一个独立于适配器的接口来实现; 虽然我目前没有使用片段。 一个问题是我的 MainActivity 没有找到我定义的方法 setListener。
错误是“找不到符号方法 setListener()”。 所以,我的方法表现得好像它是未定义的。 您知道为什么以及如何解决此问题吗? 这是 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);
}
});
}
}
这是我的适配器代码,我尝试在其中定义 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);
}
}
});
}
}
替换这个
private RecyclerView.Adapter mAdapter;
和
public MyAdapter mAdapter;
并删除额外的东西并更新如下
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.