单击ListView中的复选框时隐藏键盘

时间:2016-03-15 09:26:37

标签: c# android xamarin android-softkeyboard

我目前有ListView,其中每个Item都有一个TextView和一个CheckBox。在ListView之上是一个EditText来搜索ListView。当用户搜索某些内容并单击其中一个CheckBox或滚动到给定结果列表中时,我希望键盘消失。我怎样才能做到这一点?

我在使用InputMethodManager的其他活动中处理了键盘,但是我无法在适配器内调用它,因为EditText超出了它的范围而我无法在使用适配器的活动中调用它,因为到目前为止因为它关注点击CheckBox时没有任何变化。

有人能指出我正确的方向吗?

提前致谢

2 个答案:

答案 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();
        ...
    }
});