簡體   English   中英

單擊 ListView 中的復選框時隱藏鍵盤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM