Java Android Studio上的待办事项列表无法解析方法

Java Android Studio上的待办事项列表无法解析方法,java,android,runtime-error,Java,Android,Runtime Error,我在创建任务时遇到问题,我长时间单击了一个将被删除的项目。我不知道如何解决这个问题。显然,这应该在那里,我已经申报了。检查我评论的地方。未识别OnItemLongClicked。这就是我遇到麻烦的地方。我是新手,所以请帮忙 package com.example.mysimpletodo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import and

我在创建任务时遇到问题,我长时间单击了一个将被删除的项目。我不知道如何解决这个问题。显然,这应该在那里,我已经申报了。检查我评论的地方。未识别OnItemLongClicked。这就是我遇到麻烦的地方。我是新手,所以请帮忙

package com.example.mysimpletodo;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class itemsAdapter extends RecyclerView.Adapter<itemsAdapter.ViewHolder> {

    public interface onLongClickListener {
        void onItemLongClicked(int position);


    }

    List<String> items;
    View.OnLongClickListener longClickListener;

    public itemsAdapter(List<String> items, View.OnLongClickListener longClickListener) {
        this.items = items;
        this.longClickListener = longClickListener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


        View todoView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(todoView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        String item = items.get(position);
        holder.bind(item);

    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        TextView tvItem;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            tvItem = itemView.findViewById(android.R.id.text1);

        }

        public void bind(String item) {
            tvItem.setText(item);
            tvItem.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {

                    longClickListener.OnItemLongClicked(getAdapterPosition());
                            //check for this line again. I have a problem here where OnItemLongClicked is not recognized and stays red. How come it is not recognizing it and it's recognized above.

                    return true;

                }
            });
        }
    }
}
package com.example.mysimpletodo;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入java.util.List;
公共类itemsAdapter扩展了RecyclerView.Adapter{
公共接口onLongClickListener{
单击鼠标左键(内部位置);
}
清单项目;
View.OnLongClickListener longClickListener;
公共项适配器(列表项,View.OnLongClickListener longClickListener){
这个项目=项目;
this.longClickListener=longClickListener;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View todoView=LayoutInflater.from(parent.getContext()).flate(android.R.layout.simple\u list\u item\u 1,parent,false);
返回新的ViewHolder(TODOVIW);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
String item=items.get(位置);
持有人。绑定(项目);
}
@凌驾
public int getItemCount(){
返回items.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
文本视图项目;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
tvItem=itemView.findviewbyd(android.R.id.text1);
}
公共无效绑定(字符串项){
tviitem.setText(项目);
tvItem.setOnLongClickListener(新视图。OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
longClickListener.OnItemLongClicked(getAdapterPosition());
//再次检查这一行。我这里有一个问题,OnItemLongClicked没有被识别,并保持红色。为什么它没有识别它,而它在上面被识别。
返回true;
}
});
}
}
}

将绑定方法签名更改为:

public void bind(String item, final LongClickListener longClickListener) {
        tvItem.setText(item);
        tvItem.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                longClickListener.onItemLongClicked(getAdapterPosition());

                return true;

            }
        });
    }

如果您没有将声明的longClickListener传递到某个地方,则ViewHolder类不知道它。

您将错误的接口传递到适配器。无需传递
视图。OnLongClickListener
-您应该传递您在ItemsAdapter中已经创建的
OnLongClickListener
。别忘了实现它,然后触发它的函数
onitmlongClicked

Kotlin风格的解决方案:

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class ItemsAdapter(internal var items: List<String>, private var longClickListener: OnLongClickListener) :
    RecyclerView.Adapter<ItemsAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
        ViewHolder(LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false))

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(items[position])
    }

    override fun getItemCount(): Int = items.size

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private var tvItem: TextView = itemView.findViewById(android.R.id.text1)

        fun bind(item: String) {
            tvItem.text = item
            tvItem.setOnLongClickListener {
                longClickListener.onItemLongClicked(adapterPosition)
                true
            }
        }
    }
}

interface OnLongClickListener {
    fun onItemLongClicked(position: Int)
}
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.TextView
导入androidx.recyclerview.widget.recyclerview
类ItemsAdapter(内部变量项:列表,私有变量longClickListener:OnLongClickListener):
RecyclerView.Adapter(){
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder=
ViewHolder(LayoutInflater.from(parent.context).充气(android.R.layout.simple\u list\u item\u 1,parent,false))
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
持有者绑定(项目[位置])
}
重写getItemCount():Int=items.size
内部类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
私有变量tvItem:TextView=itemView.findViewById(android.R.id.text1)
趣味绑定(项目:字符串){
tvItem.text=项目
tvItem.setOnLongClickListener{
longClickListener.onItemLongClicked(适配器位置)
真的
}
}
}
}
仅限界面LongClickListener{
单击鼠标右键(位置:Int)
}

您声明了视图类的longClickListener

View.OnLongClickListener longClickListener

代替View.onLongClickListener LongClickListenr您应该使用的

itemsAdapter. onLongClickListener longClickListener

请尝试
longClickListener。onLongClick(…
)-尽管您可能还有其他与作用域有关的问题。Android studio仍然将onLongClickListener下划线为红色。这给了我与OnItemLongList相同的问题。不幸的是,这没有帮助,因为它没有识别什么是longClickListener,而是将其变为红色。