2016-11-16 5 views
0

Я создаю app.in, что хочу скрыть свой макет с 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 находится между 8am и 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 часов означает полдень. Я предположил, что вы имели в виду полдень, но это решение можно легко изменить на любые временные рамки.

Вы можете добавить следующие строки в активность:

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

Каждый раз, когда активность становится видимым для пользователя (в onResume) вы можете узнать время и обновить видимость макета. Кроме того, вы отслеживаете, когда произойдет следующее обновление: вы подсчитываете задержку до 8:00 или 12:00 и отправляете Runnable с использованием Handler. Всякий раз, когда ваш пользователь перестает фокусироваться на активности, вы очищаете обратный вызов.