我目前有ListView,其中每个Item都有一个TextView和一个CheckBox。在ListView之上是一个EditText来搜索ListView。当用户搜索某些内容并单击其中一个CheckBox或滚动到给定结果列表中时,我希望键盘消失。我怎样才能做到这一点?
我在使用InputMethodManager的其他活动中处理了键盘,但是我无法在适配器内调用它,因为EditText超出了它的范围而我无法在使用适配器的活动中调用它,因为到目前为止因为它关注点击CheckBox时没有任何变化。
有人能指出我正确的方向吗?
提前致谢
答案 0 :(得分:1)
1)将接口传递给适配器
class MyActivity {
public interface OnCheckBoxClickListener{
public void OnCheckboxClicked();
}
public class MyOnCheckBoxClickListener :OnCheckBoxClickListener {
private WeakReference<Context> mContext;
public MyOnCheckBoxClickListener(Context context){
mContext = new WeakReference<Context>(context);
}
public void OnCheckboxClicked(){
Context context = null;
mContext.TryGetTarget(out context);
var editText = (context as Activity).FindViewById<EditText>(Resource.Id.edittextId);
editText.ClearFocus();
}
}
YourListAdapter adapter = new YourListAdapter(new MyOnCheckBoxClickListener(this));
}
2)然后在适配器中:
class YourListAdapter {
OnCheckBoxClickListener mListener;
public override View GetView(int position, View convertView, ViewGroup parent) {
//code for view generation
var checkbox = convertView.FindViewById<Checkbox>(Resource.Id.YourCheckbox);
checkbox.Click += (sender, args) => {
mListener.OnCheckboxClicked();
}
}
}
你也可以使用代表来实现同样的目的。
答案 1 :(得分:0)
当您需要隐藏键盘时,可以使用此功能。
private void hideKeyboard() {
View view = this.getCurrentFocus();
if (view != null) {
view.clearFocus();
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
您可以在listView上使用它:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
hideKeyboard();
}
});
或checkBox:
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideKeyboard();
...
}
});