0

내 응용 프로그램에는 여러 조각을 포함하는 작업 표시 줄 활동이 있습니다. 활동을 검색 할 때 결과는 새로운 단편으로 표시됩니다. 행운을 부르지 않고 제출 버튼을 클릭 한 후 키보드를 숨기려고했습니다. 당신은 내가 onqquery의 된 TextListener 내부 검색보기에 clearFocus를 불렀다 위의 코드에서 볼 수 있듯이 여기에 내 코드작업 표시 줄 검색 후 키보드 숨기기

public class SymptomNavigator extends ActionBarActivity implements 
     MainBodyArea.Communicator, SearchResult.communicator, OnClickListener { 
    SearchView searchView; 
    FragmentManager manager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.symptom_navigator); 

     Button generateButton = (Button) findViewById(R.id.btn_Generate); 
     generateButton.setOnClickListener(this); 

     Button symptomListButton = (Button) findViewById(R.id.btn_ViewList); 
     symptomListButton.setOnClickListener(this); 

     if (findViewById(R.id.fragment_container) != null) { 

      if (savedInstanceState != null) { 
       return; 
      } 

      MainBodyArea firstFragment = new MainBodyArea(); 

      firstFragment.setArguments(getIntent().getExtras()); 

      getSupportFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, firstFragment).commit(); 
     } 
     manager = getSupportFragmentManager(); 
     mainFrag = (MainBodyArea) manager 
       .findFragmentById(R.id.mainBodyFragment); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // TODO Auto-generated method stub 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     searchView = (SearchView) MenuItemCompat 
       .getActionView(searchItem); 
     final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextChange(String newText) { 

       return true; 
      } 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       query.trim(); 
       searchView.clearFocus(); 
       if (FormValidator.isValidEntry(query)) { 
        respondToSearch(query); 

       } 
       return true; 
      } 
     }; 
     searchView.setOnQueryTextListener(queryTextListener); 
     return true; 

    } 



    @Override 
    public void respondToSearch(String value) { 
     SearchResult newFragment = new SearchResult(); 
     Bundle args = new Bundle(); 
     args.putString(SearchResult.ARG_POSITION, value); 
     newFragment.setArguments(args); 
     FragmentTransaction transaction = getSupportFragmentManager() 
       .beginTransaction(); 

     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack("search"); 
     getSupportFragmentManager().popBackStack("search", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     transaction.commit(); 

    } 
} 

입니다. 새 조각 트랜잭션이 완료되면 키보드가 숨겨지고 다시 표시됩니다. 어떻게 작동하게합니까?

참고 : 또한,이 소프트 키보드를 항상 숨기려면 다음을 사용하려면

getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 

을 숨기려고 운

try { 
      InputMethodManager input = (InputMethodManager) getActivity() 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
+0

검색을 수행중인보기에서 창 토큰을 인수로 전달하십시오. 일반적으로 키보드를 연보기에 대해 창 토큰을 사용해야합니다. 단편에서 활동까지 콜백을 사용합니다. 검색이 완료되면 EditText.getWindowToken()을 사용하여 내용이 EditText에 입력됩니다. – Rarw

답변

1

검색 시간이 지나면 한 줄의 코드로 해결할 수있었습니다. 내가 말했듯이 문제는 결과가 생성 된 후 작업 표시 줄에 집중하는 것입니다.

내가해야 할 일을했을 모든

결과 조각을 호출하기 전에이

searchView.setFocusable(false); 

를 넣어했다. 희망이 사람을 돕는다!

1

없이 다음과 같은 방법을 시도

getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

키보드를 사용하여 텍스트 필드 등을 선택할 때만 표시됩니다

+0

시도해도 여전히 동일합니다. 검색을 수행하고 결과 조각이로드되면 searchView.clearFocus()를 시도한 후에도 포커스가 자동으로 작업 표시 줄 검색으로 이동합니다. –

+0

필요하지 않은 경우 자동 포커스를 제거합니다. – Ciril

+0

행운없이 지금 시험해 보았습니다. 어쩌면 자동 완성 기능을 사용하지 않아도 appcompat 검색 위젯이 기본적으로 포커스를받을 수 있습니다. –

관련 문제