Java 我已将onItemLongClickListener设置为我的listview,但单击列表项时,什么也没有发生。我怎样才能解决这个问题?

Java 我已将onItemLongClickListener设置为我的listview,但单击列表项时,什么也没有发生。我怎样才能解决这个问题?,java,android,listview,onitemlongclicklistener,Java,Android,Listview,Onitemlongclicklistener,我正在使用从数据库中获取数据,并希望将其设置为我的列表项。单击并按住某个项目后,我希望打开一个对话框,提示用户选择给定选项之一。我的代码如下: My MainActivity.java类 public class MainActivity extends AppCompatActivity { ListView todoList; DbHelper dbHelper; ArrayAdapter<String> myAdapter; Button rename, delete; @Ov

我正在使用从数据库中获取数据,并希望将其设置为我的列表项。单击并按住某个项目后,我希望打开一个对话框,提示用户选择给定选项之一。我的代码如下: My MainActivity.java类

public class MainActivity extends AppCompatActivity {
ListView todoList;
DbHelper dbHelper;
ArrayAdapter<String> myAdapter;
Button rename, delete;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dbHelper=new DbHelper(this);
    todoList=(ListView)findViewById(R.id.to_do);
    loadTaskList();
    todoList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int i, long l) {
            Dialog dialog=new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.item_dialog);
            dialog.setTitle("Select");
            rename = dialog.findViewById(R.id.rename_task);
            delete = dialog.findViewById(R.id.delete_task);
            dialog.show();
            return false;
        }
    });
}

private void loadTaskList() {
    ArrayList<String> taskList=dbHelper.getTask();
    if(myAdapter==null){
        myAdapter=new ArrayAdapter<String>(this,R.layout.todo_item,R.id.task_title,taskList);
        todoList.setAdapter(myAdapter);
    }else {
        myAdapter.clear();
        myAdapter.addAll(taskList);
        myAdapter.notifyDataSetChanged();
    }
}
public类MainActivity扩展了AppCompatActivity{
ListView-todoList;
DbHelper-DbHelper;
阵列适配器;
按钮重命名、删除;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper=新的dbHelper(this);
todoList=(ListView)findViewById(R.id.to_do);
loadTaskList();
todoList.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父对象、视图、int i、long l){
Dialog Dialog=新建对话框(MainActivity.this);
setContentView(R.layout.item_对话框);
对话框。设置标题(“选择”);
rename=dialog.findviewbyd(R.id.rename\u任务);
delete=dialog.findviewbyd(R.id.delete\u任务);
dialog.show();
返回false;
}
});
}
私有void loadTaskList(){
ArrayList taskList=dbHelper.getTask();
如果(myAdapter==null){
myAdapter=new ArrayAdapter(这个,R.layout.todo_项,R.id.task_标题,任务列表);
todoList.setAdapter(myAdapter);
}否则{
myAdapter.clear();
myAdapter.addAll(任务列表);
myAdapter.notifyDataSetChanged();
}
}
My activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.mylist.MainActivity">

    <ListView
            android:id="@+id/to_do"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="5dp"/>
</LinearLayout>

列表项的我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true">
    <TextView
        android:id="@+id/task_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Task"
        android:textSize="20sp"
        android:layout_centerVertical="true"
        android:padding="5dp"/>

    <ImageButton
        android:id="@+id/task_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:src="@drawable/ic_delete_black_24dp" />
    <ImageButton
        android:id="@+id/task_done"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_done_black_24dp"
        android:layout_toLeftOf="@id/task_delete"/>
</RelativeLayout>

您是说您正在尝试做
onItemClickListener
。 但是你已经写了
长点击列表

试着这样做

    todoList.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
 Dialog dialog=new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.item_dialog);
            dialog.setTitle("Select");
            rename = dialog.findViewById(R.id.rename_task);
            delete = dialog.findViewById(R.id.delete_task);
            dialog.show();
}
});
todoList.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Dialog Dialog=新建对话框(MainActivity.this);
setContentView(R.layout.item_对话框);
对话框。设置标题(“选择”);
rename=dialog.findviewbyd(R.id.rename\u任务);
delete=dialog.findviewbyd(R.id.delete\u任务);
dialog.show();
}
});

若要检测某个项目被单击,您的自定义适配器必须知道是哪个项目,因此您应该将其添加到适配器类中

public ItemClicked getItem(int position){
    return items.get(position);
}

我认为从你的“长点击”中返回真值()方法而不是false应该有效。

您说过您设置了OnItemclick listener,但在代码中您植入了OnItemLongclickListner。请确定您要首先实现哪种方法。在此处添加布局代码,可能有任何布局也会覆盖单击事件。可能是您没有单击并保留该项目。我认为只有单击才有效我不会调用此方法。@VatsalHarde我指的是OnItemLongclickListner。我的错。它崩溃了吗?我指的是OnItemLongclickListner。它没有崩溃。单击并按住某个项目时,什么都没有发生。这个问题可能来自适配器,也可能来自适配器。请检查您的适配器一次或提供适配器代码。这不起作用,当我单击并按住它时,什么也不会发生我使用的不是自定义适配器,而是arrayadapter。我想使用onItemLongClickListener。很抱歉造成混淆。