要在Android ListView的onItemClick事件中准确显示弹出窗口,可以按照以下步骤进行操作:
popup_window.xml文件内容示例:
示例代码:
public class MyAdapter extends BaseAdapter {
private Context mContext;
private String[] mData;
public MyAdapter(Context context, String[] data) {
mContext = context;
mData = data;
}
@Override
public int getCount() {
return mData.length;
}
@Override
public Object getItem(int position) {
return mData[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
}
TextView textView = convertView.findViewById(R.id.text_view);
textView.setText(mData[position]);
// 设置点击事件监听器
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建PopupWindow对象
PopupWindow popupWindow = new PopupWindow(mContext);
// 设置PopupWindow的内容视图
View contentView = LayoutInflater.from(mContext).inflate(R.layout.popup_window, null);
popupWindow.setContentView(contentView);
// 设置PopupWindow的宽度和高度
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置PopupWindow可触摸
popupWindow.setFocusable(true);
// 显示PopupWindow在点击的位置上
int[] location = new int[2];
v.getLocationOnScreen(location);
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]);
}
});
return convertView;
}
}
public class MainActivity extends AppCompatActivity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.list_view);
String[] data = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
MyAdapter adapter = new MyAdapter(this, data);
mListView.setAdapter(adapter);
}
}
通过以上步骤,当ListView的某个项被点击时,将会在点击的位置上显示一个弹出窗口。