我有一个listview适配器,当我修改TextView时,我在notifyDataSetChanged()
方法上调用addTextChangeListener()
。但我的TextView失去了焦点。
如何保持焦点,覆盖notifyDataSetChanged()
?
我这样做但是没有用
@Override
public void notifyDataSetChanged(){
TextView txtCurrentFocus = (TextView) getCurrentFocus();
super.notifyDataSetChanged();
txtCurrentFocus.requestFocus();
}
答案 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)
EditText
和RecyclerView
也遇到了同样的问题
使用这行代码,我的RecyclerView
Adapter
解决了这个问题。
adapter.setHasStableIds(true);