2017-08-07 19 views
0

は私がアプリケーションを起動するたびに、それはエクスプローラ]タブを開き、私は、検索タブに切り替えることができますし、searchviewは完璧に動作TabLayoutで3つの断片を持っていたときに動作を停止します。私がエクスプローラに切り替えて検索に戻ると、それはまだ動作します。SearchViewはここ<a href="https://imgur.com/a/Z9dTQ" rel="nofollow noreferrer">http://imgur.com/a/Z9dTQ</a></p> <p>見られるように、スイッチタブ

My SearchViewは検索可能なアクティビティを使用せず、代わりにonQueryTextChangeリスナーで検索します。 SearchViewの下には、30個のTextViewがあるLinearLayoutがあり、テキストは検索によって変更されます。

しかし、クイズタブに切り替えて検索すると、SearchViewのテキストはそのまま残りますが、TextViewsは既定値の "gone"にリセットされます。http://imgur.com/a/L4RvE。 SearchViewを使用して現在検索しようとしても機能しません。

クイズタブに切り替えると自分の検索レイアウトが崩れてしまいます。私が戻ったときには、検索レイアウトが膨らみますが、SearchViewは正しくインスタンス化されません。再度検索しようとすると、OnQueryTextChangeは呼び出されません。なぜそれがこれを行うのか分かりません。

問題は、QuizLayout.xmlにSearchViewを追加し、2番目のSearchViewのコードを、クイズタブのMainActivityのonCreateOptionsMenuに追加したときに始まりました。しかし、コメントアウトしてすべてのIDが正しいことを確認した後でさえ、問題はまだ発生します。

以下は私のコードですが、無関係なコードは省略しています。

マイ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); 
    } 
} 

マイQuizFragment:(デバッグ用空)

public class QuizFragment extends Fragment {} 

マイ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); 
} 

そして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(); 
    } 
} 

My QuizLayout.xmlが空です。 SearchLayout.xmlは、テキストとVisibility.GONEのないTextViewをすべて作成します。ヘルプみんなのために非常に多くの

おかげで、

スティーブン

答えて

0

は、それを解決:)

問題はViewPagerがメモリ内に、デフォルトでは、唯一のオフスクリーンタブを保持していることでした。エクスプローラタブが最初に開かれたので、これはメモリに保存されました。検索からクイズに切り替えたとき、私のViewPagerは検索タブを削除し、エクスプローラタブを保持することに決めました。

これを修正するには、your_View_Pager_here.setOffscreenPageLimit(number_to_store);をMainActivity onCreateメソッドに入力します。

関連する問題

 関連する問題