在自定义列表视图上调用 notifyDatasetChanged() 后,将焦点放在文本视图上



我有一个列表视图适配器,当我修改我的文本视图时,我会在addTextChangeListener()方法上调用notifyDataSetChanged()。但是我的文本视图失去了重点。我怎样才能保持专注,压倒notifyDataSetChanged()

我这样做但没有工作

@Override
public void notifyDataSetChanged(){
    TextView txtCurrentFocus = (TextView) getCurrentFocus();
    super.notifyDataSetChanged();
    txtCurrentFocus.requestFocus();
}

您可以扩展ListView类并重写requestLayout()方法。当ListView完成更新并窃取焦点时,将调用该方法。因此,在此方法结束时,您可以将注意力重新放在TextView上。

public class ExampleListView extends ListView {
    private ListViewListener mListener;
    public ExampleListView(Context context) {
        super(context);
    }
    public ExampleListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public ExampleListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void requestLayout() {
        super.requestLayout();
        if (mListener != null) {
            mListener.onChangeFinished();
        }
    }
    public void setListener(ListViewListener listener) {
        mListener = listener;
    }
    public interface ListViewListener {
        void onChangeFinished();
    }
}

并将侦听器设置为此ListView

ExampleListView listView = (ExampleListView) view.findViewById(R.id.practice_exercises_list);
listView.setListener(new ExampleListView.ListViewListener() {
            @Override
            public void onChangeFinished() {
                txtCurrentFocus.requestFocus();
            }
        });

我在EditTextRecyclerView方面遇到了同样的问题 使用这行代码,为我的RecyclerView Adapter解决了这个问题。

 adapter.setHasStableIds(true);

最新更新