我有一个列表视图适配器,当我修改我的文本视图时,我会在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();
}
});
我在EditText
和RecyclerView
方面遇到了同样的问题 使用这行代码,为我的RecyclerView
Adapter
解决了这个问题。
adapter.setHasStableIds(true);