2016-11-16 46 views
0

我正在构建应用程序,希望将我的布局从8点到12点隐藏起来。我尝试使用线程,但的AsyncTask我不知道如何给时间8之间周期12隐藏特定时间的布局

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
    <de.hdodenhof.circleimageview.CircleImageView 
      android:layout_width="40dp" 
      android:layout_height="50dp" 
      android:layout_marginLeft="3dp" 
      android:scaleType="centerCrop" 
      android:src="@drawable/vegitables" 
      app:civ_border_color="#80000000" 
      app:civ_border_width="1dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:layout_marginLeft="5dp" 
      android:text="Veg :" 
      android:textColor="#F00" 
      android:textSize="18sp" 
      android:textStyle="bold" /> 
    </LinearLayout> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="150dp"/> 

</LinearLayout> 
+0

您需要设置一个函数来隐藏8-12 Am之间的布局(使用检查当前时间),并在托管此布局的活动的'onResume()'中调用它。 –

+0

'if(getNow is between 8am and 12am){layout.hide()} else {layout.show()}' – Selvin

回答

2

试试这个:

Calendar now = Calendar.getInstance(); 
int currentHour = now.get(Calendar.HOUR_OF_DAY); 
if(currentHour >=7 && currentHour <= 11) 
    rootLayoutReference.setVisibility(View.GONE); 
else 
    rootLayoutReference.setVisibility(View.VISIBLE); 
+0

'HOUR_OF_DAY'不是从零开始的。你可以只使用8和12. –

+0

谢谢@rhari它适用于我... – Manju

+0

接受它,如果它的工作:) – rhari

0

首先上午12点,意味着午夜,而下午12点意味着中午。我假定你的意思是中午,但这种解决方案可以很容易地改变到任何时间界限。当活动变得对用户(在onResume)可见

public class MyActivity extends AppCompatActivity { 
    private Handler handler; 
    private View layout; 
    private Runnable updateVisibilityCallback; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.my_activity); 

     handler = new Handler(Looper.getMainLooper()); 
     layout = findViewById(R.id.layout); 
     updateVisibilityCallback = new Runnable() { 
      @Override 
      public void run() { 
       updateTextVisibility(); 
      } 
     }; 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     updateTextVisibility(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 

     handler.removeCallbacks(updateVisibilityCallback); 
    } 

    private void updateTextVisibility() { 
     Calendar calendar = Calendar.getInstance(); 
     int hour = calendar.get(Calendar.HOUR_OF_DAY); 

     if (8 <= hour && hour <= 11) { 
      layout.setVisibility(View.GONE); 
     } else { 
      layout.setVisibility(View.VISIBLE); 
     } 

     handler.postDelayed(updateVisibilityCallback, getVisibilityUpdateDelay()); 
    } 

    private long getVisibilityUpdateDelay() { 
     Calendar rightNow = Calendar.getInstance(); 
     int hour = rightNow.get(Calendar.HOUR_OF_DAY); 

     Calendar nextUpdate = Calendar.getInstance(); 
     nextUpdate.set(Calendar.MINUTE, 0); 
     nextUpdate.set(Calendar.SECOND, 0); 
     nextUpdate.set(Calendar.MILLISECOND, 0); 

     if (hour < 8) { 
      nextUpdate.set(Calendar.HOUR_OF_DAY, 8); 
     } else if (hour < 12) { 
      nextUpdate.set(Calendar.HOUR_OF_DAY, 12); 
     } else { 
      nextUpdate.add(Calendar.DATE, 1); 
      nextUpdate.set(Calendar.HOUR_OF_DAY, 8); 
     } 

     return nextUpdate.getTimeInMillis() - rightNow.getTimeInMillis(); 
    } 
} 

每次检查的时间和更新布局的可见性:

您可以添加以下到您的活动。此外,你应该跟踪何时会发生下一次更新 - 计算延迟时间为8:00或12:00,并使用Handler发布Runnable。只要您的用户停止关注活动,就会清除回调。