2017-08-07 2 views
0

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

Antwort

0

es gelöst :)

Das Problem war, dass ViewPager hält, standardmäßig. Da meine Explorer-Registerkarte zuerst geöffnet wurde, wurde dies im Speicher gespeichert. Als ich von der Suche zum Quiz wechselte, beschloss mein ViewPager, die Suchregisterkarte zu löschen und die Registerkarte "Explorer" beizubehalten.

Um dies zu beheben, setzen your_View_Pager_here.setOffscreenPageLimit(number_to_store); in Ihrer Methode MainActivity onCreate.

Verwandte Themen