J'ai 3 fragments dans un TabLayout comme on le voit ici http://imgur.com/a/Z9dTQSearchView cesse de fonctionner lorsque la patte de commutateur
Chaque fois que je démarre l'application, il ouvre l'onglet de l'explorateur, et je peux passer à l'onglet de recherche et le SearchView fonctionne parfaitement. Si je passe à explorer et revenir à la recherche, cela fonctionne toujours.
Mon champ de recherche n'utilise pas d'activité de recherche, mais recherche à la place avec un écouteur onQueryTextChange. Ci-dessous le SearchView est un LinearLayout avec 30 TextViews dont le texte est changé par la recherche.
Cependant, si je passe à l'onglet quiz et que je reviens à la recherche, le texte SearchView reste, mais les TextViews sont réinitialisés à leurs valeurs par défaut de "gone", comme ceci: http://imgur.com/a/L4RvE. Essayer de chercher maintenant en utilisant le SearchView ne fonctionne pas.
Il semble que le passage à l'onglet quiz dégonfle ma disposition de recherche, et lorsque je change de format, cela gonfle la structure de recherche mais n'instancie pas correctement le SearchView. Lorsque j'essaie de rechercher à nouveau, OnQueryTextChange n'est pas appelé. Je n'arrive pas à comprendre pourquoi ça fait ça.
Le problème a commencé lorsque j'ai ajouté un SearchView à QuizLayout.xml et ajouté du code pour un second SearchView au onCreateOptionsMenu dans MainActivity pour l'onglet Quiz. Cependant, même après avoir commenté et vérifié que tous les identifiants étaient corrects, le problème persiste.
Ci-dessous est mon code, avec un code (sans doute) non pertinent omis.
Mon SearchFragment:
package com.example.ryans45attcdie.chess;
public class SearchFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.search_fragment, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
searchLayout =
(LinearLayout)getView().findViewById(R.id.searchLayoutS);
}
}
Mon QuizFragment: (vide pour le débogage)
public class QuizFragment extends Fragment {}
Mon MainActivity:
public class MainActivity extends AppCompatActivity {
TextView sname1;//(etc.)
ArrayList<TextView> masterNameListS;
List<Fragment> fragments = new Vector<>();
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//set up fragments in tabs
fragments.add(Fragment.instantiate(this, QuizFragment.class.getName()));
fragments.add(Fragment.instantiate(this,
ExplorerFragment.class.getName()));
fragments.add(Fragment.instantiate(this,
SearchFragment.class.getName()));
PagerAdaptor adaptor = new PagerAdaptor(getSupportFragmentManager(),
fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(adaptor);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(pager);
tabLayout.getTabAt(0).setText("QUIZ");
tabLayout.getTabAt(1).setText("EXPLORE");
tabLayout.getTabAt(2).setText("SEARCH");
adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.list_content, listItems);
pager.setCurrentItem(1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
sname1 = (TextView) findViewById(R.id.sname1); //(etc.)
final ArrayList<TextView> masterNameListS = new ArrayList<>();
masterNameListS.add(sname1); //(etc.)
// Get the SearchView and set the searchable configuration
SearchManager searchManagerS = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
SearchView searchViewS = (SearchView) findViewById(R.id.searchViewS);
// Assumes current activity is the searchable activity
ComponentName cnS = new ComponentName(this, SearchableActivity.class);
searchViewS.setSearchableInfo(searchManagerS.getSearchableInfo(cnS));
searchViewS.setIconifiedByDefault(false); // Do not iconify the widget;
expand it by default
searchViewS.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String s) {
return true;
}
@Override
public boolean onQueryTextChange(String s) {
//parse search string and set TextView texts here
return true;
}
});
return true;
}
@Override
public booleafn onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
Et PagerAdapter:
package com.example.ryans45attcdie.chess;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.WindowManager;
import java.util.List;
public class PagerAdaptor extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PagerAdaptor(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int i) {
return fragments.get(i);
}
@Override
public int getCount() {
return fragments.size();
}
}
Mon fichier QuizLayout.xml est vide. My SearchLayout.xml crée tous les TextView sans texte et Visibility.GONE.
Merci beaucoup pour les gars d'aide,
Stephen