2016-04-19 59 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; 
        } 
    }