我有一个 ListView
,它带有我自己的从 BaseAdapter
派生的自定义适配器。 ListView
中的每个项目都有子项目,例如 ImageView
和 TextView
。
我如何知道用户点击了这些子项目中的哪一个?例如,是否可以在 getView
函数中附加一个监听器,或者这可能是个问题?
/亨里克
编辑:目前我在包含ListView
的 Activity 中有一个onItemClick
。有什么好方法可以通过检查 onItemClick
中的参数来了解 ListView 中特定项目中的哪个子项目已被按下。
@Override
public void onItemClick(AdapterView<?> a, View v, int pos, long id) {
.
.
}
最佳答案
我使用了 Miga's Hobby Programming 中的想法.
关键是从新的 onClick 监听器调用 performItemClick()。这会将点击传递给已用于 ListView 的 onItemClick()。它是如此快速和简单,我觉得我在作弊。
这是来自列表适配器的 getView():
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.one_line, parent, false);
}
// This chunk added to get textview click to register in Fragment's onItemClick()
// Had to make position and parent 'final' in method definition
convertView.findViewById(R.id.someName).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
// do stuff...
}
还有 onItemClick():
@Override
public void onItemClick(AdapterView adapterView, View view, int position, long id) {
long viewId = view.getId();
if (viewId == R.id.someName) {
Toast.makeText(getActivity(), "someName item clicked", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getActivity(), "ListView clicked: " + id, Toast.LENGTH_SHORT).show();
}
}
关于android - 如何知道单击的特定 ListView 项目中的哪个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527101/