Поле EditText не будет вызывать программную клавиатуру во многих случаях - PullRequest
1 голос
/ 30 сентября 2011

Мое приложение Android работает в TabHost.У меня есть 5 «подвидов», все из которых выполняются, как и ожидалось, с одним исключением.Последний элемент - это функция поиска.Это такой простой интерфейс с TextView для метки, EditText для поля поиска и Button.

Когда я впервые запускаю приложение и перехожу на вкладку Search, независимо от того, сколькокогда я щелкаю в поле EditText, программная клавиатура не вызывается;однако, если вызывается другое действие, которое не является частью моего TabHost, а затем я возвращаюсь к действию поиска и щелкаю текст Edit Edit поиска, клавиатура вызывается, как и ожидалось.

У меня нет никаких действийобработчики для поля, только для нажатия кнопки.Я попытался заставить EditText сфокусироваться на событии onCreate и даже заставить отображать клавиатуру, используя различные методы, найденные здесь, в StackOverflow.См. Мой текущий код ниже:

public class Search extends Activity {
/** Called when the activity is first created. */


@Override    
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.search);

    //Give the edit text focus
    EditText et1 = (EditText) findViewById(R.id.editText1);

    et1.requestFocus();     

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(et1, InputMethodManager.SHOW_FORCED);

    Button btn = (Button) findViewById(R.id.button1);       
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            EditText et = (EditText) findViewById(R.id.editText1);
            String term = et.getText().toString();
            if (term.length() > 0) {
                //do stuff }

            else if (term.length() <= 0) {
                Toast.makeText(getApplicationContext(), "Please Enter A Search Terml", Toast.LENGTH_SHORT).show();
            }

        }

    });

    }

Вот как выглядит TabHost:

Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab
    intent = new Intent().setClass(this, Tab3.class);


    // Initialize a TabSpec for each tab and add it to the TabHost
    try {



        //home Tab
        intent = new Intent().setClass(this, Home.class);
        spec = tabHost.newTabSpec("home").setIndicator("Home",
                      res.getDrawable(R.drawable.grade))
                  .setContent(intent);
        tabHost.addTab(spec);   



        //tab 2
        intent = new Intent().setClass(this, Tab2.class);
        spec = tabHost.newTabSpec("tab2").setIndicator("Tab2",
                      res.getDrawable(R.drawable.chart))
                  .setContent(intent);
        tabHost.addTab(spec);

        //tab 3
        intent = new Intent().setClass(this, Tab3.class);
        spec = tabHost.newTabSpec("tab3").setIndicator("Tab3",
                      res.getDrawable(R.drawable.tab3))
                  .setContent(intent);
        tabHost.addTab(spec);


        //tab 4         
        intent = new Intent().setClass(this, Tab4.class);
        spec = tabHost.newTabSpec("tab4").setIndicator("Tab4",
                      res.getDrawable(R.drawable.tab4))
                  .setContent(intent);
        tabHost.addTab(spec);


        //search tab            
        intent = new Intent().setClass(this, Search.class);
        spec = tabHost.newTabSpec("search").setIndicator("Search",
                      res.getDrawable(R.drawable.magnify))
                  .setContent(intent);
        tabHost.addTab(spec);

        //Set tab To Home
        tabHost.setCurrentTab(0);
    }
    catch (Exception ex) {
        Toast t = Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG);
        t.show();
    }

Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 сентября 2011

вы можете попробовать прослушиватель onFocusChage для своего поля editText, которое я назвал searchBoxEditText ... вызовите inputmethodmanager, чтобы открыть клавиатуру, когда фокус изменяется на ваш текст редактирования, а затем, когда он теряет фокус, закрыть клавиатуру

onFocusChange(View v, boolean hasFocus){

if(v==searchBoxEditText){

if(hasFocus==true){
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);

}else{ //ie searchBoxEditText doesn't have focus
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

}

}


}//end onFocusChange
...