2016-04-19 120 views
0

我試圖在bottomSheetBehavior內使用gridView。
我得到我的數據異步,並且當用戶點擊我的按鈕時我打電話給setAdapter。 問題是我看到數據閃爍。我能做些什麼來殺死這個閃爍?BottomSheetBehavior與GridView閃爍

以我的onCreate:

final ViewGroup gridViewContainer = (ViewGroup) findViewById(R.id.bottomSheetContainer); 
    if (gridViewContainer != null) { 
    gridView = (GridView) gridViewContainer.findViewById(R.id.actionGridView); 
    bottomSheetBehavior = BottomSheetBehavior.from(gridViewContainer); 
    bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
     @Override 
     public void onStateChanged(@NonNull View bottomSheet, int newState) { 
      switch (newState) { 
       case BottomSheetBehavior.STATE_EXPANDED: 
        isBottomSheetQuickActionOpen = true; 
        gridViewContainer.requestLayout(); 
        break; 
       case BottomSheetBehavior.STATE_COLLAPSED: 
        isBottomSheetQuickActionOpen = false; 
        break; 
      } 
     } 

     @Override 
     public void onSlide(@NonNull View bottomSheet, float slideOffset) { 

     } 
    }); 

public void onBottomBarIconClicked(View v){ 
    switch(v.getId()){ 
     case R.id.right_bottom_action: 
      if (bottomSheetBehavior != null) { 
       if (!isBottomSheetQuickActionOpen) { 
        setActionsForQuickDialog(); 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
       } else { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
       } 
      } 
      break; 
    } 
} 

private void setupQuickActionDialog() { 
    ActionsManager actionManager = ActionsManager.get(); 
    List<WidgetMetaData> list = getMyList(); 
    if (CollectionUtils.isNotEmpty(list)) { 
     if (gridView != null) { 
      adapterGridView = new AdapterGridView(ContactDetailsActivity.this, list, contact); 
      gridView.setAdapter(adapterGridView); 
     } 
    } 
} 

回答

0

我發現一種解決方案,方式:
1.可運行

private final Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
       if (!isBottomSheetQuickActionOpen) { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
       } else { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
       } 
     } 
    }; 
  • 保存主的保存部件線程:

    Handler mainHandler = new Handler(context.getMainLooper());

  • 單擊按鈕時,首先創建gridview圖標,然後使用mainthread來發布可運行。如果我們想要摺疊bottomsheetbehaviour,我們應該從隊列中刪除可運行內容,然後通過崩潰

    setBottomSheetState(BottomSheetBehavior.STATE_COLLAPSED);

  • 更改過的功能:

    public void onBottomBarIconClicked(View v) { 
        switch (v.getId()) { 
         case R.id.open_menu_btn: 
          if (bottomSheetBehavior != null) { 
           if (!isBottomSheetQuickActionOpen) { 
            setActionsForQuickDialog(); 
            mainHandler.post(runnable); 
           } else { 
            handler.removeCallbacks(runnable); 
            collapseBottomSheet(); 
           } 
          } 
          break; 
        } 
    }