每次进行搜索查询时更改TextView

时间:2018-12-27 16:02:14

标签: java android

我正在尝试获取此代码,以将搜索视图中键入的内容显示为布局的textview中的文本。但是当我运行该应用程序时,什么也没显示。

public class MainActivity extends AppCompatActivity {

     TextView textview;
     @Override
     public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);
     setContentView(R.layout.layout_search);
     textview = (TextView) findViewById(R.id.search_result);
     }

     @Override
     public boolean onCreateOptionsMenu(Menu menu){
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.search_menu,menu);
          SearchView searchView = (SearchView) menu.findItem(R.id.search_box).getActionView();
          searchView.setQueryHint("Search Here");
          searchView.setIconifiedByDefault(false);

          searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
               @Override
               public boolean onQueryTextSubmit(String search){
               return false;
               }

               @Override
               public boolean onQueryTextChange(String search){
                    String result= "You have searched for "+search;
                    textview.setText(result);
                    return false;
               }
          });

          return super.onCreateOptionsMenu(menu);
     }
 }

我该怎么做才能在textview中显示搜索字符串?

修改

<menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     <item android:id="@+id/search_box"
          android:title="search here"
          android:icon="@android:drawable/ic_menu_search"
          app:actionViewClass="android.widget.SearchView"
          app:showAsAction="always"/>

</menu>

当我向搜索框输入搜索查询时,它没有显示在布局的textview小部件上。

2 个答案:

答案 0 :(得分:1)

您可能也有兴趣研究数据绑定以解决此问题:

https://developer.android.com/topic/libraries/data-binding/

在此页面上:

<TextView android:text="@{viewmodel.userName}" />

答案 1 :(得分:0)

要更新UI对象,必须使用主线程,在代码中,您正在更新另一个线程上的textview。尝试更改方法onQueryTextChange以使用主线程更新您的TextView

@Override
public boolean onQueryTextChange(String search){
      String result= "You have searched for "+search;
      runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textview.setText(result);
        }
      });
      return false;
}