```java
package com.example.adaptertest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView lv;
private ArrayAdapter
private List
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData(); //初始化适配器View和数据源
initAdapter(); //初始化适配器
lv.setOnItemClickListener(this); //设置点击事件监听器
}
private void initData() {
//初始化适配器View
lv = findViewById(R.id.lv);
//数据源初始化
list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("数据" + i);
}
}
private void initAdapter() {
//参数一:使用到的上下文对象
//参数二:使用到的布局文件。给item进行使用的
//参数三:数据源对象
adapter = new ArrayAdapter<>(MainActivity.this, R.layout.list_item, list);
lv.setAdapter(adapter); //为ListView设置适配器
}
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
String item = list.get(position); //获取被点击的项的数据
Toast.makeText(MainActivity.this, "你点击了: " + item, Toast.LENGTH_SHORT).show(); //显示提示信息
}
}
```
adapter = new ArrayAdapter
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// parent:适配器设置到的adapterView对象,在这里表示的是ListView(就是代表的是当前的ListView对象lv)
// view:适配器item对应的View
// position:索引位置
// id:在listView中的item对应的id
// position是从0开始依次向下递增
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "你点击了,索引是:" + position + ",id:" + id, Toast.LENGTH_SHORT).show();
}
});
// 实现item长按删除的效果
lv.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = (int) v.getTag();
list.remove(position);
adapter.notifyDataSetChanged();
return true;
}
});
在您的代码中,您已经为`ListView`设置了一个长按监听器。当用户长按列表项时,这个监听器会触发并执行一些操作。根据给定的代码,这里是它的重构版本:
```java
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
// 删除对应的 item 索引
list.remove(position);
// 如果适配器变化,需要当前的 listView 也通知到
adapter.notifyDataSetChanged();
// 当为 true 时,不会响应单击事件
return true;
}
});
```
在这个重构版本中,我对原始代码进行了格式化以提高可读性。这段代码的功能是:当用户长按列表中的某个项目时,它将从列表中删除该项目,并通知适配器数据集已更改。最后,返回`true`表示不再处理此事件(即不再响应单击事件)。