Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android listview item not getting focus

My item in my listview is not getting focus, my onFocusChanged was not working so I created a log statement to log the focus and I am always returning "false" for the result of v.isFocused().

The onClick method is working fine.

Any ideas?

@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;
}
like image 955
Jim Moody Avatar asked Feb 04 '26 00:02

Jim Moody


1 Answers

Maybe adding to the listview android:descendantFocusability="afterDescendants", could help you. More in docs.: here

like image 58
Mikelis Kaneps Avatar answered Feb 06 '26 14:02

Mikelis Kaneps



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!