在自定义列表视图上调用notifyDatasetChanged()后,继续关注TextView?

时间:2013-10-22 10:10:18

标签: android listview android-arrayadapter notifydatasetchanged

我有一个listview适配器,当我修改TextView时,我在notifyDataSetChanged()方法上调用addTextChangeListener()。但我的TextView失去了焦点。 如何保持焦点,覆盖notifyDataSetChanged()

我这样做但是没有用

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

2 个答案:

答案 0 :(得分:1)

您可以扩展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();
            }
        });

答案 1 :(得分:0)

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

 adapter.setHasStableIds(true);