2013-06-02 6 views
2

Je travaille actuellement sur la conversion d'une activité en un fragment. L'activité contient un Edittext qui, lorsqu'il est cliqué, affiche un DialogFragmment pour choisir une date. Dans l'activité que je voudrais simplement appeler cela pour montrer la boîte de dialogue:Affichage d'un fragment de dialogue dans un fragment

@SuppressLint("NewApi") 
public void showDatePickerDialog(View v) { 
    DatePickerFragment newFragment = new DatePickerFragment(datePickerEditText); 
    newFragment.show(getFragmentManager(), "datePicker"); 
} 

Toutefois, cela ne semble pas fonctionner pour montrer la boîte de dialogue à partir d'un fragment. Je reçois une erreur sur la méthode "show". Donc, pour être clair, je me demandais comment montrer un DialogFragment à partir d'un fragment?

C'est le code pour le DialogFragment

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

public EditText activity_edittext; 

@SuppressLint("ValidFragment") 
public DatePickerFragment(EditText edit_text) { 
    activity_edittext = edit_text; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current date as the default date in the picker 
    final Calendar c = Calendar.getInstance(); 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 

    return new DatePickerDialog(getActivity(), this, year, month, day); 
} 

@Override 
public void onDateSet(DatePicker view, int year, int month, int day) { 
    activity_edittext.setText(String.valueOf(day) + "/" + String.valueOf(month + 1) + "/" + String.valueOf(year)); 
} 

}

Répondre

0

j'ai développé un exemple en utilisant votre code, en changeant la relation d'héritage à FragmentActivity et fonctionne très bien. Essayez ceci:

import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.support.v4.app.FragmentActivity; 

public class MainActivity extends FragmentActivity { 

private EditText editText; 

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

    editText = (EditText) this.findViewById(R.id.activity_edittext); 
    editText.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showDatePickerDialog(); 
     } 
    }); 

} 

public void showDatePickerDialog() { 
    DatePickerFragment newFragment = new DatePickerFragment(editText); 
    newFragment.show(getSupportFragmentManager(), "datePicker"); 
} 

La mise en page utilisée:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/activity_main" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 

    <EditText android:id="@+id/activity_edittext" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:inputType="text"/> 

</LinearLayout> 
+0

Fonctionne très bien. Merci beaucoup. – mgnusl

+0

@mgnusl vous êtes les bienvenus! Je suis content de vous aider. – mari

1

Votre travail de code pour moi, aucune erreur sur montrer la méthode. Vérifiez si les bibliothèques correctes d'importation (par exemple, android.support.v4.app. * Si vous utilisez la bibliothèque de support).

EDIT - code source complet:

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

MainActivity.java

package com.viduka.stackoverflow; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 

public class MainActivity extends FragmentActivity { 

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

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.container, new AFragment()); 
    ft.commit(); 
    } 
} 

AFragment.java - dont DatePickerFragment est appelé

package com.viduka.stackoverflow; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.View; 
import android.widget.EditText; 

public class AFragment extends Fragment{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     showDatePickerDialog(new EditText(getActivity())); 
    } 

    public void showDatePickerDialog(View v) { 
     DatePickerFragment newFragment = new DatePickerFragment(new EditText(getActivity())); 
     newFragment.show(getFragmentManager(), "datePicker"); 
    } 
} 

DatePickerFragment.java

package com.viduka.stackoverflow; 

import java.util.Calendar;  
import android.annotation.SuppressLint; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.widget.DatePicker; 
import android.widget.EditText; 

@SuppressLint("ValidFragment") 
public class DatePickerFragment extends DialogFragment implements 
     DatePickerDialog.OnDateSetListener { 

    public EditText activity_edittext; 

    public DatePickerFragment(EditText edit_text) { 
     activity_edittext = edit_text; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
     activity_edittext.setText(String.valueOf(day) + "/" 
       + String.valueOf(month + 1) + "/" + String.valueOf(year)); 
    } 
} 
+0

semble fonctionner très bien aussi. Merci! – mgnusl

+0

J'ajoute du code de travail à ma réponse. – viduka

Questions connexes