I 3-Fragmente in einer TabLayout haben wie hier http://imgur.com/a/Z9dTQ gesehenSuche nicht mehr funktioniert, wenn der Schalter Tab
Immer, wenn ich die Anwendung zu starten, öffnet es den Explorer-Registerkarte, und ich kann auf die Suche Tab wechseln und die Suche funktioniert perfekt. Wenn ich zum Explorer und zurück zur Suche wechsle, funktioniert es immer noch.
Meine Suche keine durchsuchbar Aktivität verwenden, sondern sucht mit einem onQueryTextChange Zuhörer. Unter dem SearchView befindet sich ein LinearLayout mit 30 TextViews, deren Text durch Suchen verändert wird.
Wenn ich jedoch zur Quiz-Registerkarte und zurück zur Suche wechsle, bleibt der SearchView-Text bestehen, aber die TextViews werden auf ihre Standardwerte "gegangen" zurückgesetzt, so: http://imgur.com/a/L4RvE. Der Versuch, jetzt mit dem SearchView zu suchen, funktioniert nicht.
Es scheint, dass meine Suche auf die Quiz Registerkarte Schalt Layout Luft verliert, und wenn ich zurückschalten, bläht es das Such Layout aber die Suche nicht ordnungsgemäß instanziiert. Wenn ich versuche, erneut zu suchen, wird OnQueryTextChange nicht aufgerufen. Ich kann nicht herausfinden, warum es das tut.
Das Problem begann, als ich eine SearchView zu QuizLayout.xml hinzugefügt und Code für eine zweite SearchView zu dem OnCreateOptionsMenu in MainActivity für die Registerkarte Quiz hinzugefügt. Aber selbst nach dem Auskommentieren und dem Sicherstellen, dass alle IDs korrekt waren, tritt das Problem immer noch auf.
Unten ist mein Code, mit einigen (hoffentlich) irrelevant Code weggelassen.
Mein 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);
}
}
Mein QuizFragment: (leer für das Debuggen)
public class QuizFragment extends Fragment {}
Mein 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);
}
Und 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();
}
}
Meine QuizLayout.xml ist leer. Meine SearchLayout.xml erstellt alle TextViews ohne Text und Visibility.GONE. nur einen Off-Screen-Registerkarte im Speicher
Vielen Dank für die Hilfe Jungs,
Stephen