2017-02-04 57 views
0

我在自定义弹出窗口中有一个searchview,下面有一个listview。Android,searchview在自定义弹出框中没有输入文字

我想实现一个标准的searchview场景 - 在searchview中输入文本将过滤在列表视图中显示的内容。

出于某种原因,我无法在searchview中输入文本。 软键盘显示正常,但是当我输入时,没有输入文字。

public void display(final LayoutInflater inflater, int layout, final View anchor, ArrayList<String> docs, String currentDoc){ 
    LinearLayout popupView = (LinearLayout)inflater.inflate(layout, null); 
    final InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
    if(mList == null){ 
     mList = (ListView)popupView.findViewById(R.id.doc_pop_list); 
    } 
    mDocuments = docs; 
    adapter = new ArrayAdapter<String>(mContext, R.layout.list_item,docs); 
    mList.setAdapter(adapter); 

    searchDocs=(SearchView) popupView.findViewById(R.id.doc_list_search); 
    searchDocs.requestFocus(); 
    searchDocs.setQuery("", false); 
    searchDocs.setOnQueryTextListener(new OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String text) { 
      // TODO Auto-generated method stub 
      return false; 
      } 
      @Override 
      public boolean onQueryTextChange(String text) { 
        adapter.getFilter().filter(text); 
      return false; 
      } 
     }); 
    mList.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      docName = mList.getItemAtPosition(position).toString(); 
      mWindow.dismiss();     
      mListener.docSelected(docName.toString()); 

     } 

    }); 

    Button dismiss = (Button)popupView.findViewById(R.id.button_docs_close); 
    dismiss.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
      mWindow.dismiss(); 

     } 

    }); 

查看上面的java代码;

在我的xml我有一个自定义列表视图项:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceListItemSmall" 
android:gravity="center_vertical" 
android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
android:minHeight="?android:attr/listPreferredItemHeightSmall" 
android:textColor="#000000" /> 

,这是这个布局中显示:

<SearchView 
     android:id="@+id/doc_list_search" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:queryHint="Search documents..." > 

    </SearchView> 
</RelativeLayout> 


<ListView 
    android:id="@+id/doc_pop_list" 
    android:layout_width="match_parent" 
    android:layout_height="420dp" 
    android:layout_above="@+id/doclist_close" 
    android:layout_below="@+id/docs_title" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="16dp" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:background="#ffffff" > 

</ListView> 

<Button 
    android:id="@+id/button_docs_close" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/blue" 
    android:text="@string/close" 
    android:textColor="@color/white" /> 
..... 

任何想法是什么原因造成这种现象?

感谢

回答

0

你能尝试登录从onQueryTextChange搜索查看的内容,当你键入的东西吗?我只是想排除显示问题。

编辑:

public class MyActivity extends Activity { 
    RelativeLayout layout; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

     layout = (RelativeLayout) findViewById(R.id.layout); 
     display(); 
    } 

    public void display(){ 
     LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.popup, null); 
     layout.addView(view); 

     SearchView searchDocs=(SearchView) view.findViewById(R.id.doc_list_search); 
     searchDocs.requestFocus(); 
     searchDocs.setQuery("", false); 
     searchDocs.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String text) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
      @Override 
      public boolean onQueryTextChange(String text) { 
       // TODO Auto-generated method stub 
       Log.d("Test","input"); 
       return false; 
      } 
     }); 
    } 
} 
+0

好吧,我想这一点,我不能得到任何输出logcat的。我添加了几个断点,以便我能够在文本发生变化时捕获这些断点,而不是任何东西。 – mangledBadger

+0

好吧,我测试了你的代码(只是基本功能),输入显示正常。也许它会帮助你(查看编辑答案)。 – SILL

+0

嘿,谢谢,我已经尝试了上面的,好吧,重构它以适合我的使用方式,但要保持基本相同。还没有发生。现在,我的自定义弹出视图显示在软键盘上,CSS z-index per-say,你认为这是相关的吗?我在独立活动中使用与上面相同的实现,并且它的功能正常。当它在这个自定义视图中实现时,它不起作用。 – mangledBadger