2016-04-07 15 views
0

私は、フラグメントが配置されているMainActivityを持っています。 SearchViewを持つフラグメント(app:actionViewClass = "android.support.v7.widget.SearchView" )、MainActivityにはツールバーにSearchViewアイコンがあります。 フラグメントの検索ビューが表示/非表示(Flipkartアプリのような)の場合、ツールバーからアイコンを非表示または表示したいと思っています。非表示や表示方法のいずれかが使用されたときに正しく動作しているが、私はそれらの両方を使用する場合、それは検索アクションメニューのアイコンが隠されていません

java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference 

マイコードスニペットがあるようなエラー..

MainActivityを与える

@Override 
public boolean onCreateOptionsMenu(final Menu menu) 
{ 
    _menu = menu; 
    final Menu m= menu; 
    getMenuInflater().inflate(R.menu.menus, menu); 
    final MenuItem searchItem = menu.findItem(R.id.action_search); 

    SearchManager searchManager = (SearchManager) DrawerActivity.this.getSystemService(Context.SEARCH_SERVICE); 

    SearchView searchView = null; 
    if (searchItem != null) { 
     searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    } 
    if (searchView != null) { 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    } 
    searchView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      m.performIdentifierAction(searchItem.getItemId(), 0); 
     } 
    }); 

    searchItem.setVisible(false); 
    return super.onCreateOptionsMenu(menu); 
} 

public void show_search(){ 

    final MenuItem searchItem = _menu.findItem(R.id.action_search); 
    searchItem.setVisible(true); 
//  invalidateOptionsMenu(); //if i use this it not show the icon. 
} 

public void hide_search() { 
    final MenuItem sitem = _menu.findItem(R.id.action_search); // gives NullPointerException in this line. 
    sitem.setVisible(false); 
    invalidateOptionsMenu(); 
} 

フラグメントコード:

public class Fragment1 extends Fragment 
{ 

     scroll = (ScrollView) v.findViewById(R.id.scroll_view); 

// Total Height of layout which contains searchview 
    ViewTreeObserver vas = lin.getViewTreeObserver(); 
    vas.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      ViewGroup.MarginLayoutParams vlp = (ViewGroup.MarginLayoutParams) lin.getLayoutParams(); 
      search_size = lin.getMeasuredHeight() + vlp.topMargin; 
      lin.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

     } 
    }); 
     scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 

     @Override 
     public void onScrollChanged() { 

      float y = scroll.getScrollY(); 

      DrawerActivity d = (DrawerActivity) getActivity(); 
      if (y >= search_size) 
      { 
       d.show_search(); 
      } 
      else 
      { 
       d.hide_search(); 
      } 
     } 
    }); 
} 

答えて

0

おはようございます、他のmenu.xmlを膨張させてみませんか?例えば は...あなたのフラグメントに

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    setHasOptionsMenu(true); 
} 

private Menu mMenu; 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_fragment, menu); 
    mMenu = menu; 

    MenuItem searchViewItem = menu.findItem(R.id.search); 

    final android.support.v7.widget.SearchView searchView = 
      (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchViewItem); 

    super.onCreateOptionsMenu(menu, inflater); 
} 

を挿入し、私はありません、あなたはちょうど彼が私だけスクロールしながらツールバーの検索アイコンを表示/非表示にするアプリをフリップカート試す

+0

を支援してきました。 –

関連する問題