2016-04-07 46 views
0

Fragmanın yerleştirildiği bir MainActivity var. SearchView (app: actionViewClass = "android.support.v7.widget.SearchView" ) ve MainActivity'nin Araç Çubuğu'nda bir Arama Görünümü simgesine sahip olması. Fragman Arama Görünümü Göster/Gizle (Flipkart uygulaması gibi) olduğunda simgeyi Araç Çubuğundan gizlemek/göstermek istiyorum. Gizleme veya gösterme yöntemin biri kullanılırken düzgün çalıştığını, Ama her ikisi de kullandığınızda o zamanArama eylemi menüsü simgesi gizlenmiyor

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

Benim kod parçacıkları olduğu gibi hata ..

MainActivity verir

@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(); 
} 

Fragment kodu:

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

cevap

0

Günaydın, neden diğer menu.xml parçasını şişirmiyorsunuz? Örneğin .. senin parçadaki sadece o ben sadece/gizlemek kaydırma yaparken araç çubuğundaki arama simgesini göstermek istediğiniz uygulamayı FlipKart deneyin, ben

+0

Hayır yardımcı olmuştur

@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); } 

yerleştirin. –