Android列表项无法获得焦点

3

我的ListView中的项没有获取焦点,我的onFocusChanged方法不起作用,所以我创建了一个日志语句来记录焦点,并且总是返回v.isFocused()的“false”结果。

onClick方法正常工作。

有什么想法吗?

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View row = convertView;
    final ExerciseListHolder holder;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ExerciseListHolder();
        holder.textView = (TextView) row.findViewById(R.id.exercise_list_text_view);
        holder.imageView = (ImageView) row.findViewById(R.id.trash_button);
        holder.editText = (EditText) row.findViewById(R.id.exercise_list_edit_text_view);
        holder.deleteButton = (Button) row.findViewById(R.id.delete_button);

        row.setTag(holder);

    } else {
        holder = (ExerciseListHolder) row.getTag();
    }

    final Exercise exercise = data.get(position);
    holder.textView.setText(exercise.getName());
    holder.imageView.setVisibility(View.GONE);
    holder.editText.setVisibility(View.GONE);
    holder.deleteButton.setVisibility(View.GONE);

    holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.imageView.setVisibility(View.GONE);
            holder.deleteButton.setVisibility(View.VISIBLE);
            holder.deleteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Database db = new Database(context);
                            db.deleteExercise(exercise);
                            notifyDataSetChanged();

                }
            });

        }
    });
    row.setFocusable(true);

    row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.requestFocus();

            Log.d("focused?", Boolean.toString(v.isFocusable()));
            Log.d("focused?", Boolean.toString(v.isFocused()));

            ExerciseListHolder holder = (ExerciseListHolder) v.getTag();

            holder.editText.setText(holder.textView.getText());
            holder.editText.setSelection(holder.editText.getText().length());

            holder.imageView.setVisibility(View.VISIBLE);
            holder.textView.setVisibility(View.GONE);
            holder.editText.setVisibility(View.VISIBLE);

        }
    });


    return row;
}
1个回答

1
也许在listview中添加android:descendantFocusability="afterDescendants"可以帮助您。更多信息请参见文档:这里

那里的文档很有帮助,但似乎并没有解决问题。我还尝试为ListView设置android:focusable="false",取得了一些进展。今晚会再仔细看看。 - Jim Moody
将此行添加到您的父布局根视图 - android:descendantFocusability="blocksDescendants",也许父视图的子视图正在窃取焦点。 - Mikelis Kaneps
并将此添加到根视图 - android:focusableInTouchMode="true" android:clickable="true" - Mikelis Kaneps
今晚我会尝试这些。谢谢你的帮助! - Jim Moody
你拿到答案了吗,伙计? - Deep Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接