не могу заставить Android-клавиатуру появляться / скрываться с помощью ViewPager - PullRequest
4 голосов
/ 12 октября 2011

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

Я пробовал разные способы отображения клавиатуры, но она просто не работает. Я думаю, что я должен вызывать код клавиатуры дисплея в неправильном месте.

 @Override
public Object instantiateItem( View collection, int position )
{
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = null;
    if(position==0){
        layout=inflater.inflate(R.layout.other, null);
        //new PC().create(layout, context);
        ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(collection.getWindowToken(), 0);
    }else if(position==1){
        layout=inflater.inflate(R.layout.main, null);
        new BlurayRemote().create(layout,context);
        ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(collection.getWindowToken(), 0);
    }else if(position==2){
        layout=inflater.inflate(R.layout.text, null);
        new TextInput().create(layout,context);
        ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInputFromInputMethod(collection.getWindowToken(), 0);
    }

    ((ViewPager) collection).addView(layout);

    return layout;      
}

Любая помощь будет великолепна, потому что она сводит меня с ума!

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Я уверен, что есть лучший способ сделать это, но у меня возникла та же проблема, и я обошел ее, установив родительский элемент View на фокусируемый. Таким образом, все, что вызывает всплывающую программную клавиатуру, не будет фокусироваться при перемещении между страницами.

<!-- Dummy item to prevent your View from receiving focus -->
<LinearLayout
    ...
    android:focusable="true" 
    android:focusableInTouchMode="true" />

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe -->
    <EditText ... />

</LinearLayout>
1 голос
/ 13 октября 2011

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

@Override
public Object instantiateItem( View collection, int position )
{
    LayoutInflater inflator = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = null;
    if(position==0){
        layout=inflater.inflate(R.layout.other, null);
        //new PC().create(layout, context);
        ((InputMethodManager)collection.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(collection.getWindowToken(), 0);
    }else if(position==1){
        layout=inflater.inflate(R.layout.main, null);
        new BlurayRemote().create(layout, collection.getContext());
        ((InputMethodManager)collection.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(collection.getWindowToken(), 0);
    }else if(position==2){
        layout=inflater.inflate(R.layout.text, null);
        new TextInput().create(layout,collection.getContext());
        ((InputMethodManager)collection.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInputFromInputMethod(collection.getWindowToken(), 0);
    }

    ((ViewPager) collection).addView(layout);

    return layout;      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...