我有一个列表视图,其中每行listView.setOnItemClickListener()
都有两个文本视图和一个编辑文本。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("position", String.valueOf(position));
}
});
Log.e("position", String.valueOf(position));
未显示在Logcat上
答案 0 :(得分:1)
如果您的项目与Model一起提供,则可以像下面的代码一样在setOnItemCLickListner中创建模型的对象,然后根据位置从模型中获取数据。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ActivityModel booking = movieList.get(position);
String id = booking.getActivityId();
Toast.makeText(this, id , Toast.LENGTH_LONG).show();
}
});
在您的XML中,在列表视图中添加以下属性。
android:focusable="false"
答案 1 :(得分:1)
我认为重点是EditText
。在XML中,将其添加到您的editText视图android:focusable="false"
答案 2 :(得分:1)
这是因为editText占用了您的焦点,因此没有点击被注册。
当我为EditText设置android:focusable="false"
时,ListView项上的onItemClick起作用,但是当我在内部单击时,EditText不会获得光标。
如果我将android:focusable="true"
设置为EditText,则EditText是可聚焦的,但是单击ListView的onItemClick无效。
因此以这种方式修改适配器:
public class AdapterListCards extends CursorAdapter implements View.OnTouchListener {
public AdapterListCards(Context context) {
super(context, null, true);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (view instanceof EditText) {
EditText editText = (EditText) view;
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
} else {
ViewHolder holder = (ViewHolder) view.getTag();
holder.edtCode.setFocusable(false);
holder.edtCode.setFocusableInTouchMode(false);
}
return false;
}
private class ViewHolder {
TextView txtName;
EditText edtCode;
}
@Override
public View newView(final Context context, Cursor cursor, ViewGroup parent) {
View convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
final ViewHolder holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.txt_name);
holder.edtCode = (EditText) convertView.findViewById(R.id.pass);
holder.edtCode.setOnTouchListener(this);
convertView.setOnTouchListener(this);
convertView.setTag(holder);
return convertView;
}
@Override
public void bindView(View view, Context context, Cursor cur) {
ViewHolder holder = (ViewHolder) view.getTag();
if (cur!=null) holder.txtName.setText(cur.getString(cur.getColumnIndex("name")));
}
}