Java 将click listener添加到PagerPater CardView中的两个按钮
在我的项目中,我有一个PagerAdapter来膨胀包含用户创建的文本对象的CardView 在每个CardView上,我都有编辑和删除按钮来访问与保存文本对象的ArrayList相关的方法 我在适配器中编写了一个接口,用于处理文本对象创建活动中的单击。但是,适配器中的instatiateItem方法现在显示在@Override注释“method not Override method from the superclass”中。当我删除@Override注释时,我的Logcat中出现了一个错误:Java 将click listener添加到PagerPater CardView中的两个按钮,java,android,onclicklistener,android-pageradapter,Java,Android,Onclicklistener,Android Pageradapter,在我的项目中,我有一个PagerAdapter来膨胀包含用户创建的文本对象的CardView 在每个CardView上,我都有编辑和删除按钮来访问与保存文本对象的ArrayList相关的方法 我在适配器中编写了一个接口,用于处理文本对象创建活动中的单击。但是,适配器中的instatiateItem方法现在显示在@Override注释“method not Override method from the superclass”中。当我删除@Override注释时,我的Logcat中出现了一个错误
java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden
如何在PagerAdapter中为CardView上的按钮实现单击侦听器
适配器代码:
public class CreateAdapter extends PagerAdapter {
private List<PdfPage> pagesList;
private LayoutInflater layoutInflater;
private Context context;
private onItemClickListener mListener;
public interface onItemClickListener{
//click method for edit button
void onEditClick(int position);
//click method for delete button
void onDeleteClick(int position);
}
public void setOnItemClickListener(onItemClickListener listener){
mListener = listener;
}
public CreateAdapter(List<PdfPage> pagesList, Context context) {
this.pagesList = pagesList;
this.context = context;
}
@Override
public int getCount() {
return pagesList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position, final onItemClickListener listener) {
layoutInflater = LayoutInflater.from(context);
View view = null;
if(pagesList.get(position).getPageType() == "Text") {
view = layoutInflater.inflate(R.layout.create_text_cardview, container, false);
TextView inputText = view.findViewById(R.id.inputTextView);
ImageButton editButton = view.findViewById(R.id.imageButtonEdit);
ImageButton deleteButton = view.findViewById(R.id.imageButtonDelete);
//if this works, see 12:30 of video for image getter
inputText.setText(pagesList.get(position).getPageText());
//edit click listener
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null){
int position2 = pagesList.indexOf(pagesList.get(position));
listener.onEditClick(position2);
}
}
});
//delete click listener
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null){
int position3 = pagesList.indexOf(pagesList.get(position));
listener.onDeleteClick(position3);
}
}
});
container.addView(view, 0);
}
//put else statement here for image cardView
assert view != null;
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
public class CreateAdapter extends PagerAdapter {
private List<PdfPage> pagesList;
private LayoutInflater layoutInflater;
private Context context;
private onItemClickListener mListener;
public interface onItemClickListener{
//click method for edit button
void onEditClick(int position);
//click method for delete button
void onDeleteClick(int position);
}
public void setOnItemClickListener(onItemClickListener listener){
mListener = listener;
}
public CreateAdapter(List<PdfPage> pagesList, Context context) {
this.pagesList = pagesList;
this.context = context;
}
@Override
public int getCount() {
return pagesList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
layoutInflater = LayoutInflater.from(context);
View view = null;
if(pagesList.get(position).getPageType() == "Text") {
view = layoutInflater.inflate(R.layout.create_text_cardview, container, false);
TextView inputText = view.findViewById(R.id.inputTextView);
ImageButton editButton = view.findViewById(R.id.imageButtonEdit);
ImageButton deleteButton = view.findViewById(R.id.imageButtonDelete);
//if this works, see 12:30 of video for image getter
inputText.setText(pagesList.get(position).getPageText());
//edit click listener
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mlistener != null){
int position2 = pagesList.indexOf(pagesList.get(position));
mlistener.onEditClick(position2);
}
}
});
//delete click listener
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mlistener != null){
int position3 = pagesList.indexOf(pagesList.get(position));
mlistener.onDeleteClick(position3);
}
}
});
container.addView(view, 0);
}
//put else statement here for image cardView
assert view != null;
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
公共类CreateAdapter扩展了PagerAdapter{
私人列表页面列表;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人语境;
私人监听者;
公共接口侦听器{
//单击编辑按钮的方法
void onEditClick(int位置);
//单击删除按钮的方法
无效单击(内部位置);
}
公共void setOnItemClickListener(onItemClickListener侦听器){
mListener=监听器;
}
公共CreateAdapter(列表页面列表、上下文){
this.pagesList=页面列表;
this.context=上下文;
}
@凌驾
public int getCount(){
返回pagesList.size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象){
返回视图.equals(对象);
}
@非空
@凌驾
公共对象实例化项(@NonNull视图组容器、最终int位置、最终onItemClickListener侦听器){
layoutInflater=layoutInflater.from(上下文);
视图=空;
if(pagesList.get(position.getPageType()=“Text”){
视图=布局更平坦。充气(R.layout.create\u text\u cardview,container,false);
TextView inputText=view.findViewById(R.id.inputTextView);
ImageButton editButton=view.findViewById(R.id.imageButtonEdit);
ImageButtonDeleteButton=view.findViewById(R.id.imageButtonDelete);
//如果这样做有效,请参阅12:30的视频获取图像
inputText.setText(pagesList.get(position.getPageText());
//编辑单击侦听器
editButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(侦听器!=null){
int position2=pagesList.indexOf(pagesList.get(position));
listener.onEditClick(位置2);
}
}
});
//删除单击侦听器
deleteButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(侦听器!=null){
int position3=pagesList.indexOf(pagesList.get(position));
listener.onDeleteClick(位置3);
}
}
});
container.addView(视图,0);
}
//将else语句放在此处以查看图像cardView
断言视图!=null;
返回视图;
}
@凌驾
public void destructionItem(@NonNull视图组容器,int位置,@NonNull对象){
container.removeView((视图)对象);
}
活动代码:
public class CreateActivity extends AppCompatActivity {
ViewPager viewPager;
CreateAdapter createAdapter;
List<PdfPage> pdfPageList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create);
pdfPageList = new ArrayList<>();
createAdapter = new CreateAdapter(pdfPageList, this);
viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(createAdapter);
viewPager.setPadding(130, 0, 130, 0);
}
@Override
protected void onStart() {
super.onStart();
createAdapter = new CreateAdapter(pdfPageList, this);
viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(createAdapter);
viewPager.setPadding(130, 0, 130, 0);
createAdapter.setOnItemClickListener(new CreateAdapter.onItemClickListener() {
@Override
public void onEditClick(int position) {
}
@Override
public void onDeleteClick(int position) {
pdfPageList.remove(position);
}
});
}
public类CreateActivity扩展了AppCompatActivity{
查看页面查看页面;
CreateAdapter CreateAdapter;
列表pdfPageList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create);
pdfPageList=newarraylist();
createAdapter=新的createAdapter(pdfPageList,此项);
viewPager=findViewById(R.id.viewPager);
viewPager.setAdapter(createAdapter);
设置填充(130,0,130,0);
}
@凌驾
受保护的void onStart(){
super.onStart();
createAdapter=新的createAdapter(pdfPageList,此项);
viewPager=findViewById(R.id.viewPager);
viewPager.setAdapter(createAdapter);
设置填充(130,0,130,0);
createAdapter.setOnItemClickListener(新的createAdapter.onItemClickListener(){
@凌驾
public void onEditClick(int位置){
}
@凌驾
公共位置单击(内部位置){
pdfPageList.移除(位置);
}
});
}
您的实例化Item
方法没有从其超类重写,因为您添加了一个额外的参数final-onItemClickListener
当您对所有条目使用相同的clickListener并将项位置作为参数传递时,我建议您在适配器构造函数中传递onItemClickListener
,或者通过
public void setOnItemClickListener(onItemClickListener listener){
mListener = listener;
}
适配器代码:
public class CreateAdapter extends PagerAdapter {
private List<PdfPage> pagesList;
private LayoutInflater layoutInflater;
private Context context;
private onItemClickListener mListener;
public interface onItemClickListener{
//click method for edit button
void onEditClick(int position);
//click method for delete button
void onDeleteClick(int position);
}
public void setOnItemClickListener(onItemClickListener listener){
mListener = listener;
}
public CreateAdapter(List<PdfPage> pagesList, Context context) {
this.pagesList = pagesList;
this.context = context;
}
@Override
public int getCount() {
return pagesList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position, final onItemClickListener listener) {
layoutInflater = LayoutInflater.from(context);
View view = null;
if(pagesList.get(position).getPageType() == "Text") {
view = layoutInflater.inflate(R.layout.create_text_cardview, container, false);
TextView inputText = view.findViewById(R.id.inputTextView);
ImageButton editButton = view.findViewById(R.id.imageButtonEdit);
ImageButton deleteButton = view.findViewById(R.id.imageButtonDelete);
//if this works, see 12:30 of video for image getter
inputText.setText(pagesList.get(position).getPageText());
//edit click listener
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null){
int position2 = pagesList.indexOf(pagesList.get(position));
listener.onEditClick(position2);
}
}
});
//delete click listener
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null){
int position3 = pagesList.indexOf(pagesList.get(position));
listener.onDeleteClick(position3);
}
}
});
container.addView(view, 0);
}
//put else statement here for image cardView
assert view != null;
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
public class CreateAdapter extends PagerAdapter {
private List<PdfPage> pagesList;
private LayoutInflater layoutInflater;
private Context context;
private onItemClickListener mListener;
public interface onItemClickListener{
//click method for edit button
void onEditClick(int position);
//click method for delete button
void onDeleteClick(int position);
}
public void setOnItemClickListener(onItemClickListener listener){
mListener = listener;
}
public CreateAdapter(List<PdfPage> pagesList, Context context) {
this.pagesList = pagesList;
this.context = context;
}
@Override
public int getCount() {
return pagesList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
layoutInflater = LayoutInflater.from(context);
View view = null;
if(pagesList.get(position).getPageType() == "Text") {
view = layoutInflater.inflate(R.layout.create_text_cardview, container, false);
TextView inputText = view.findViewById(R.id.inputTextView);
ImageButton editButton = view.findViewById(R.id.imageButtonEdit);
ImageButton deleteButton = view.findViewById(R.id.imageButtonDelete);
//if this works, see 12:30 of video for image getter
inputText.setText(pagesList.get(position).getPageText());
//edit click listener
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mlistener != null){
int position2 = pagesList.indexOf(pagesList.get(position));
mlistener.onEditClick(position2);
}
}
});
//delete click listener
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mlistener != null){
int position3 = pagesList.indexOf(pagesList.get(position));
mlistener.onDeleteClick(position3);
}
}
});
container.addView(view, 0);
}
//put else statement here for image cardView
assert view != null;
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
公共类CreateAdapter扩展了PagerAdapter{
私人列表页面列表;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人语境;
私人监听者;
公共接口侦听器{
//单击编辑按钮的方法
void onEditClick(int位置);
//单击删除按钮的方法
无效单击(内部位置);
}
公共void setOnItemClickListener(onItemClickListener侦听器){
mListener=监听器;
}
公共CreateAdapter(列表页面列表、上下文){
this.pagesList=页面列表;
this.context=上下文;
}
@凌驾
public int getCount(){
返回pagesList.size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象){
返回视图.equals(对象);
}
@非空
@凌驾
公共对象实例化项(@NonNull ViewGroup container,final int position){
layoutInflater=layoutInflater.from(上下文);
视图=空;
if(pagesList.get(position.getPageType()=“Text”){
视图=布局更平坦。充气(R.layout.create\u text\u cardview,container,false);
TextView inputText=view.findViewById(R.id.inputTextView);
ImageButton editButton=view.findViewById(R.id.imageButtonEdit);
ImageButton deleteButton=视图