Закрытие клавиатуры в ViewPager

Я реализовал три вкладки с помощью ViewPager. В правом макете вкладки у меня есть один текстовый виджет редактирования, когда пользователи нажимают на него, появляется клавиатура. Если пользователь не закрывает клавиатуру вручную и не проводит пальцем по средней или левой вкладке, клавиатура остается на экране. Итак, как избежать клавиатуры на двух других вкладках, где она мне не нужна.

Изменить: вот мой код.

    class ViewPagerActivity extends Activity   {



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(1);
    TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.titles);
    titleIndicator.setViewPager(myPager);


      } }

Второй файл: MyPagerAdapter.java

  class MyPagerAdapter extends PagerAdapter implements OnClickListener,
    OnLongClickListener, AdapterView.OnItemSelectedListener {

public Object instantiateItem(View collection, int position) {

    LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resId = 0;
    View view;
    switch (position) {

    case 0:
        resId = R.layout.left;
        view = inflater.inflate(resId, null);
        break;
    case 1:


        resId = R.layout.main_c;

        view = inflater.inflate(resId, null);


        btn_no1 = (Button) view.findViewById(R.id.one);
        btn_no1.setOnClickListener(this);
                    ((ViewPager) collection).addView(view, 0);
        return view;
           case 2:
        resId = R.layout.right;

        view = inflater.inflate(resId, null);

        main_spinner = (Spinner) view.findViewById(R.id.spinner1);
        main_spinner.setOnItemSelectedListener(this);

        from_spinner = (Spinner) view.findViewById(R.id.spinner2);
        from_spinner.setOnItemSelectedListener(this);

        to_spinner = (Spinner) view.findViewById(R.id.spinner3);
        to_spinner.setOnItemSelectedListener(this);

        swap = (ImageButton) view.findViewById(R.id.swap_spinner);
        swap.setOnClickListener(this);
        ((ViewPager) collection).addView(view, 0);

        return view;


    }

    view = inflater.inflate(resId, null);

    ((ViewPager) collection).addView(view, 0);

    return view;
}

И TitlePageIndicator выглядит так: TitlePageIndicator


person Vins    schedule 30.01.2013    source источник
comment
Попробуйте это, предполагая, что вы используете фрагмент: getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);. Удалите getActivity()., если это обычное действие.   -  person Siddharth Lele    schedule 30.01.2013


Ответы (3)


На мой взгляд, это не серьезная проблема. Пользователь открывает клавиатуру для ввода текста и скрывает ее, когда она больше не нужна.

Имея ссылку на ваш объект EditText, это должно скрыть клавиатуру:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

Вызов фрагмента выше при выходе из правой вкладки.

person ottel142    schedule 30.01.2013

Попробуй это.

Сначала прослушайте событие ViewPager.OnPageChangeListener. Затем проверьте, видна ли программная клавиатура, если она отображается на странице, где она не нужна, скройте ее с помощью этого кода:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
    imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
}

Надеюсь, это поможет. :)

person kdroider    schedule 30.01.2013
comment
И как проверить, видно ли? - person Adreamus; 06.10.2013

Если это кому-то поможет, я вышел с этим:

Класс утилит

public void hideKeyboard(Activity activity) {
    if (activity == null || activity.getCurrentFocus() == null || activity.getCurrentFocus().getWindowToken() == null) return;

    InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

public void hideKeyboard(Fragment fragment) {
    if (fragment == null || fragment.getActivity() == null || fragment.getActivity().getCurrentFocus() == null || fragment.getActivity().getCurrentFocus().getWindowToken() == null) return;

    InputMethodManager inputManager = (InputMethodManager) fragment.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(fragment.getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

и внутри класса MyPagerAdapter

 @Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object);

    //assuming fragment in position 2 should hide the keyboard
    if (position == 2) {
        new SystemGlobal().hideKeyboard((Fragment) object);
    } 
}
person DoubleK    schedule 23.02.2017