Domanda

Ho una questione davvero strana.Ho un cercapersone con frammenti.Uno dei frammenti è il frammento dei messaggi.In questo frammento ho un frammenttabhost con tre frammenti di tabulazione.Nella barra d'azione ho una ricerca.Quando voglio cercare qualcosa e inizio a scrivere la stringa di query, la messa a fuoco della vista di ricerca viene rimossa da esso ed è impostata sulla prima scheda del tabulato.In questo modo non posso scrivere la stringa di query.Questo succede solo quando sono vicino alla fronza dei messaggi.Ad esempio: se sono abbastanza lontano (1 pagina), la ricerca funziona bene.

Qualcuno può dirmi cosa potrebbe essere il problema?

Ecco una foto:

I messaggiFRAGMENT:

public class MessagesFragment extends Fragment {
private FragmentTabHost tabHost;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    this.tabHost = new FragmentTabHost(this.getActivity());
    this.tabHost.setup(this.getActivity(), this.getChildFragmentManager(), container.getId());

    TabSpec tabSpecForAllMessages = this.tabHost.newTabSpec("all").setIndicator("ALL");
    this.tabHost.addTab(tabSpecForAllMessages, AllMessagesFragment.class, null);

    TabSpec tabSpecForSentMessages = this.tabHost.newTabSpec("sent").setIndicator("SENT");
    this.tabHost.addTab(tabSpecForSentMessages, SentMessagesFragment.class, null);

    TabSpec tabSpecForReceivedMessages = this.tabHost.newTabSpec("received").setIndicator("RECEIVED");
    this.tabHost.addTab(tabSpecForReceivedMessages, ReceivedMessagesFragment.class, null);

    return this.tabHost;
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    this.tabHost = null;
}
.

}

Il layout host della scheda:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </TabWidget>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>
</LinearLayout>

</TabHost>
.

La barra delle azioni elementi del menu:

<?xml version="1.0" encoding="utf-8"?>
.

<item
    android:id="@+id/menu_item_search"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="collapseActionView|ifRoom"
    android:title="@string/title_search" />

<item
    android:id="@+id/menu_item_home"
    android:icon="@drawable/ic_action_home"
    android:showAsAction="always"
    android:title="@string/title_home" />
.

Il gestore di eventi OnCreatePtionSmenu:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =
            (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(this
            .getComponentName()));

    return true;
}
.

È stato utile?

Soluzione

Prova Aggiungi metodo

@Override
public boolean onQueryTextChange(String text) {
    if(searchView!=null)
        searchView.requestFocusFromTouch();

    return true;
}
.

SearchView deve essere INIT SearchView Searchview;

Il mio metodo ONCreateOptionsMenu:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.only_search, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    searchView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            searchView.requestFocusFromTouch();
            return true;
        }
    });
}
.

È lavorato per me!

Altri suggerimenti

Sono anche affrontato lo stesso problema e ho risolto questo con lo scrivendo ascoltatore alla vista come questa ..

searchView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            searchView.requestFocusFromTouch();
            return true;
        }
    });
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top