- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用接口(interface)方法为我的 RecyclerView CardView 项目创建 onClickListener。我是新手,据我所知,您需要有适配器类的构造函数。我已经创建了构造函数,但仍然收到错误。当我在“RecyclerViewAdapter myrvAdapter = new RecyclerViewAdapter(NewCategory,this);”中输入“this”时,会显示“mData”而不是“onCardViewListener”。
错误:
error: constructor RecyclerViewAdapter in class RecyclerViewAdapter cannot be applied to given types;
required: Context,List<Category>,OnCardViewListener
found: ActivityTwo,ActivityTwo,ActivityTwo,List<Category>
reason: actual and formal argument lists differ in length
我在 Android Studio 中有以下 Java 代码:
RecyclerViewAdapter.java:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context mContext;
private List<Category> mData;
private OnCardViewListener mOnCardViewListener;
public RecyclerViewAdapter(Context mContext, List<Category> mData, OnCardViewListener onCardViewListener){
this.mContext = mContext;
this.mData = mData;
this.mOnCardViewListener = onCardViewListener;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.cardview_items_categories,parent,false);
return new MyViewHolder(view, mOnCardViewListener);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tv_category_title.setText(mData.get(position).getTitle());
holder.img_category_icon.setImageResource(mData.get(position).getIcon());
}
@Override
public int getItemCount() {
return mData.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView tv_category_title;
ImageView img_category_icon;
CardView cardView;
OnCardViewListener mOnCardViewListener;
public MyViewHolder(View itemView, OnCardViewListener onCardViewListener){
super(itemView);
tv_category_title = (TextView) itemView.findViewById(R.id.category_text);
img_category_icon = (ImageView) itemView.findViewById(R.id.category_icon);
cardView = (CardView) itemView.findViewById(R.id.cv_nav);
mOnCardViewListener = onCardViewListener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mOnCardViewListener.onCardViewClick(getAdapterPosition());
}
}
public interface OnCardViewListener{
void onCardViewClick(int position);
}
ActivityTwo.java:
public class ActivityTwo extends AppCompatActivity implements RecyclerViewAdapter.OnCardViewListener {
private static final String TAG = "ActivityTwo";
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
List<Category> NewCategory;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
NewCategory = new ArrayList<>();
NewCategory.add(new Category("Food & Beverages",R.drawable.fnb_24));
NewCategory.add(new Category("Administration",R.drawable.admin_white_24dp));
NewCategory.add(new Category("Faculty Blocks",R.drawable.faculty_white_24dp));
NewCategory.add(new Category("Teaching Buildings",R.drawable.teaching_24));
NewCategory.add(new Category("Library & Study Areas",R.drawable.library_white_24dp));
NewCategory.add(new Category("Research Buildings",R.drawable.research_24));
NewCategory.add(new Category("Campus Accommodations",R.drawable.accommt_white_24dp));
NewCategory.add(new Category("Sports",R.drawable.sports_white_24dp));
NewCategory.add(new Category("Student Association",R.drawable.sa_24dp));
NewCategory.add(new Category("Information Services",R.drawable.it_white_24dp));
NewCategory.add(new Category("Islamic Centre & Mosques",R.drawable.mosque_24));
NewCategory.add(new Category("Guard Houses",R.drawable.security_24));
RecyclerView myrv = (RecyclerView) findViewById(R.id.recylcerview_navigation);
RecyclerViewAdapter myrvAdapter = new RecyclerViewAdapter(NewCategory,this);
myrv.setLayoutManager(new GridLayoutManager(this,2));
myrv.setAdapter(myrvAdapter);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav_bar);
Menu menu = bottomNavigationView.getMenu();
MenuItem menuItem = menu.getItem(2);
menuItem.setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.timetable:
Intent intent0 = new Intent(ActivityTwo.this, MainActivity.class);
startActivity(intent0);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case R.id.transports:
Intent intent1 = new Intent(ActivityTwo.this, ActivityOne.class);
startActivity(intent1);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case R.id.navigation:
break;
}
return false;
}
});
}
@Override
public void onCardViewClick(int position) {
}
类别.java:
public class Category {
private String title;
private int icon;
public Category (){
}
public Category(String title, int icon) {
this.title = title;
this.icon = icon;
}
public String getTitle() {
return title;
}
public int getIcon() {
return icon;
}
public void setTitle(String title) {
this.title = title;
}
public void setIcon(int icon) {
this.icon = icon;
}
最佳答案
解决了问题。以前 mContext 用于 LayoutInflater。这导致构造函数需要 3 个参数,并且我收到错误,因为 ActivityTwo.java 中未定义 mContext。因此,通过改变编写 LayoutInflater 代码的方式,我设法将参数数量减少到 2 个,并且代码运行良好。希望这会对构造函数和参数的新手有所帮助。
请参阅下面所做的更改:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_items_categories, parent, false);
RecyclerViewAdapter.java:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private List<Category> mData;
private OnCardViewListener mOnCardViewListener;
public RecyclerViewAdapter(List<Category> mData, OnCardViewListener onCardViewListener){
this.mData = mData;
this.mOnCardViewListener = onCardViewListener;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_items_categories, parent, false);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tv_category_title.setText(mData.get(position).getTitle());
holder.img_category_icon.setImageResource(mData.get(position).getIcon());
}
@Override
public int getItemCount() {
return mData.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView tv_category_title;
ImageView img_category_icon;
CardView cardView;
OnCardViewListener mOnCardViewListener;
public MyViewHolder(View itemView, OnCardViewListener onCardViewListener){
super(itemView);
tv_category_title = (TextView) itemView.findViewById(R.id.category_text);
img_category_icon = (ImageView) itemView.findViewById(R.id.category_icon);
cardView = (CardView) itemView.findViewById(R.id.cv_nav);
mOnCardViewListener = onCardViewListener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mOnCardViewListener.onCardViewClick(getAdapterPosition());
}
}
public interface OnCardViewListener{
void onCardViewClick(int position);
}
ActivityTwo.java:
public class ActivityTwo extends AppCompatActivity implements RecyclerViewAdapter.OnCardViewListener {
private static final String TAG = "ActivityTwo";
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
List<Category> NewCategory;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
NewCategory = new ArrayList<>();
NewCategory.add(new Category("Food & Beverages",R.drawable.fnb_24));
NewCategory.add(new Category("Administration",R.drawable.admin_white_24dp));
NewCategory.add(new Category("Faculty Blocks",R.drawable.faculty_white_24dp));
NewCategory.add(new Category("Teaching Buildings",R.drawable.teaching_24));
NewCategory.add(new Category("Library & Study Areas",R.drawable.library_white_24dp));
NewCategory.add(new Category("Research Buildings",R.drawable.research_24));
NewCategory.add(new Category("Campus Accommodations",R.drawable.accommt_white_24dp));
NewCategory.add(new Category("Sports",R.drawable.sports_white_24dp));
NewCategory.add(new Category("Student Association",R.drawable.sa_24dp));
NewCategory.add(new Category("Information Services",R.drawable.it_white_24dp));
NewCategory.add(new Category("Islamic Centre & Mosques",R.drawable.mosque_24));
NewCategory.add(new Category("Guard Houses",R.drawable.security_24));
RecyclerView myrv = (RecyclerView) findViewById(R.id.recylcerview_navigation);
RecyclerViewAdapter myrvAdapter = new RecyclerViewAdapter(NewCategory,this);
myrv.setLayoutManager(new GridLayoutManager(this,2));
myrv.setAdapter(myrvAdapter);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav_bar);
Menu menu = bottomNavigationView.getMenu();
MenuItem menuItem = menu.getItem(2);
menuItem.setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.timetable:
Intent intent0 = new Intent(ActivityTwo.this, MainActivity.class);
startActivity(intent0);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case R.id.transports:
Intent intent1 = new Intent(ActivityTwo.this, ActivityOne.class);
startActivity(intent1);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case R.id.navigation:
break;
}
return false;
}
});
}
@Override
public void onCardViewClick(int position) {
Log.d(TAG, "onCardViewClick: Clicked!" + position);
}
关于java - 类 RecyclerViewAdapter 中的构造函数 RecyclerViewAdapter 无法应用于给定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606145/
我正在尝试使用接口(interface)方法为我的 RecyclerView CardView 项目创建 onClickListener。我是新手,据我所知,您需要有适配器类的构造函数。我已经创建了构
我的布局中有一个卡片 View ,有两个 TextView 和一个 ImageView ,并且我有一个使用卡片 View 来设置项目的回收器 View 。我想要实现的是在点击卡片 View 时启动底部
这个问题在这里已经有了答案: What is a NullPointerException, and how do I fix it? (12 个答案) 关闭 5 年前。 在我决定添加原生广告之前,
当我按下后退按钮时,RecyclerView 上的 notifyDataSetChanged() 出现错误。这是代码: 主 Activity .java class MainActivity exte
我正在尝试实现一个包含 CardView 的 RecyclerView,每个 MapView 都在里面。问题是,在自定义适配器中初始化的 MapView 不会加载,除非您单击它。正如这里已经提到的:A
我想在 Recyclerview 的 onClickListener 方法中膨胀 Recyclerview。 为此,我知道我必须从相应的 Activity 中获取上下文才能设置 LinearLayou
我正在尝试使用两个微调器功能对 Recyclerview 进行编码。 主要目标是显示两个微调器过滤的结果。 例如,有 7 个列表,每个都有一定的学科,如“建筑”、“机械”、“电气”等,楼层数据如 1、
我正在尝试从 RecyclerView 中删除一个项目,动画正在发生,但该项目没有被清除。执行以下操作后,我晚上会看到相同的项目: notifyItemRemoved(favlistTransID);
我正在编写一个天气预报应用程序,我想尝试实现一个 RecyclerView,这样我基本上就可以拥有一个横向滚动的 ListView。但是,当我设置文本时,由于 View ID 为空,我的 onBind
我在 viewpager 的一张幻灯片上有 fragment “Incoming”。此 fragment 包含一个 RecyclerView,其中填充了 custom-relative-layouts
在我的应用程序中,我想使用 RecyclerView 适配器,对于设置数据,我使用了 DiffUtils。 我想从服务器搜索数据,然后将其显示到 RecyclerView! 我写了下面的代码,但是在搜
Image of RecyclerView within AlertDialog 我的 AlertDialog 中有一个 RecyclerView,如图所示。我的问题是,如果我单击 RecyclerV
我从我的 MySQL 数据库中获取了一个String,该数据库工作正常。获取数据后,我尝试在 Setter 中设置数据,并在 RecyclerAdapter 中填充获取数据以将其输出为列表,但它不起作
我已经有一个 RecyclerViewAdapter 类,现在我想要打开另一个 Activity ,点击以前的 recyclerView 的项目,它有自己的 recyclerView。但是当我创建另一
我在我的应用程序中实现了 RecyclerView。由于性能差异,我想使用 notifyItemRemoved 和 notifyItemChanged 而不是 setDataChange 远程更改、添
更新 我的用例是通过将 MapFragment 直接放在 xml 中而不是稍后添加它来解决的 - 但我保持这个问题悬而未决,因为我仍然不清楚为什么以编程方式添加它会失败。 原始问题 我有一个 Card
我试图通过接口(interface)将 String 和 ArrayList 作为参数值从 RecyclerViewAdapter 传递到 fragment ,在回收器中完美加载数据,但是当我尝试选择
我是一名优秀的程序员,十分优秀!