2016-06-09 8 views
1

Ich habe viele Datepicker- und Kalenderansicht-Bibliotheken durchsucht, um bestimmte Daten zu deaktivieren. Caldroid scheint eine Option zum Deaktivieren von Daten zu haben, aber es kann nur Daten deaktivieren, die dem aktuellen Datum entsprechen. Aber ich möchte bestimmte Daten wie 10, 18, 21, usw. deaktivieren, dafür gibt es keine Option. Es wäre also eine große Hilfe, wenn jemand erwähnen würde, wie man es in Caldroid oder in irgendeiner anderen Bibliothek macht. Was ich tat:Caldroid bestimmte Daten deaktivieren

public class MainActivity extends AppCompatActivity{ 
 

 
    @Override 
 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
    } 
 

 
    public void change(View v){ 
 

 
     CaldroidFragment mCaldroidFragment = new CaldroidFragment(); 
 
     Bundle args = new Bundle(); 
 
     args.putInt(CaldroidFragment.START_DAY_OF_WEEK, CaldroidFragment.MONDAY); 
 
     mCaldroidFragment.setArguments(args); 
 

 
     ArrayList<String> disabledDates = new ArrayList<String>(); 
 
     disabledDates.add("10"); 
 
     disabledDates.add("20"); 
 
     disabledDates.add("30"); 
 
     ArrayList<Date> dd = new ArrayList<Date>(); 
 

 
     for(int i=0; i<disabledDates.size(); i++){ 
 
      Calendar cal = Calendar.getInstance(); 
 
      cal.add(Calendar.DAY_OF_WEEK, i); 
 
      dd.add(cal.getTime()); 
 
     } 
 

 

 
     mCaldroidFragment.setDisableDates(dd); 
 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame , mCaldroidFragment).commit(); 
 

 

 

 
    } 
 

 
}

+0

Können Sie zeigen uns den Inhalt der 'dd'? –

+0

dd ist nur die ArrayList , die im Caldroid-Beispielcode zum Einfügen von Daten verwendet wird. Ich habe versucht, meine ArrayList 'disabledDates' in' dd' einzufügen, aber es hat nur 9,10,11 Daten deaktiviert. –

Antwort

1

Das folgende Beispiel funktioniert für mich.

Fügen Sie die folgenden UI-Elemente in Ihre activity_main.xml Datei:

<LinearLayout 
    android:id="@+id/calendar1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/button_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <Button 
     android:id="@+id/customize_button" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="customize"/> 
</LinearLayout> 

Ihre MainActivity Passen Sie wie folgt vor:

import android.os.Bundle; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 

import com.roomorama.caldroid.CaldroidFragment; 

import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 

public class MainActivity extends AppCompatActivity { 
    private CaldroidFragment caldroidFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    caldroidFragment = new CaldroidFragment(); 

    Bundle args = new Bundle(); 
    Calendar cal = Calendar.getInstance(); 
    args.putInt(CaldroidFragment.START_DAY_OF_WEEK, CaldroidFragment.MONDAY ); 
    caldroidFragment.setArguments(args); 

    // Attach to the activity 
    FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
    t.replace(R.id.calendar1, caldroidFragment); 
    t.commit(); 

    final Button customizeButton = (Button) findViewById(R.id.customize_button); 
    // Customize the calendar 
    customizeButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // Set disabled dates 
      try { 
       ArrayList<Date> disabledDates = new ArrayList<Date>(); 

       disabledDates.add(getDate("2016-06-16")); 
       disabledDates.add(getDate("2016-06-20")); 
       disabledDates.add(getDate("2016-06-30")); 

       // Customize 
       caldroidFragment.setDisableDates(disabledDates); 
       // Refresh 
       caldroidFragment.refreshView(); 

      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    } 

    private Date getDate(int year, int month, int day) { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.clear(); 

    // month start at 1. Need to minus 1 to get javaMonth 
    calendar.set(year, month - 1, day); 

    return calendar.getTime(); 
    } 

    private Date getDate(String strDate) throws ParseException { 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = format.parse(strDate); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.clear(); 

    calendar.setTime(date); 

    return calendar.getTime(); 
    } 
} 

Wenn Sie auf die Schaltfläche Anpassen klicken, wird es die folgenden Termine deaktivieren:

  1. 16 Juni 2016
  2. 20. Juni 2016
  3. 30. Juni 2016
+0

Nichts ist passiert. Wie kann ich Daten dynamisch hinzufügen, wenn meine Daten aus dem Web Service kommen? –

+0

Ich wollte nur sicherstellen, dass Ihre Daten korrekt sind, weshalb ich die ArrayList manuell ausgefüllt habe. Wenn Sie Caldroid auffordern, nach dem Aufruf von 'setDisableDates' zu aktualisieren, z. B. 'mCaldroidFragment.refreshView();' –

+0

Ja, ich habe refreshView() nach 'mCaldroidFragment.setDisableDates (dd);' aufgerufen, aber es hat sich nichts geändert. –