Java Android Studio上的待办事项列表无法解析方法
我在创建任务时遇到问题,我长时间单击了一个将被删除的项目。我不知道如何解决这个问题。显然,这应该在那里,我已经申报了。检查我评论的地方。未识别OnItemLongClicked。这就是我遇到麻烦的地方。我是新手,所以请帮忙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
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,而是将其变为红色。