[英]Hide keyboard when checkbox in ListView is clicked
我目前有 ListView,其中每個 Item 都有一個 TextView 和一個 CheckBox。 在 ListView 之上是一個 EditText 來搜索 ListView。 當用戶搜索某些內容並單擊其中一個復選框或滾動給定結果列表時,我希望鍵盤消失。 我怎樣才能做到這一點?
我已經使用 InputMethodManager 在我的其他活動中處理了鍵盤,但我不能在適配器內部調用它,因為 EditText 超出了它的范圍,我不能在使用適配器的活動中調用它,因為就它而言單擊復選框時沒有任何變化。
任何人都可以指出我正確的方向嗎?
提前致謝
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();
}
}
}
您也可以使用委托實現相同的目的。
當您需要隱藏鍵盤時可以使用此功能。
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.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideKeyboard();
...
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.