2013-06-02 2 views
2

현재 Activity를 Fragment로 변환하려고합니다. 활동에는 Edittext가 포함되어 있습니다. Edittext를 클릭하면 날짜 선택을위한 DialogFragmment가 표시됩니다. 작업에서 나는 단순히 대화 상자를 보여주기 위해 이것을 호출 할 것입니다 :조각에 DialogFragment 표시

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

그러나 이것은 단편에서 대화 상자를 표시하는 것으로 보이지 않습니다. "show"방법에 오류가 발생했습니다. 명확히하기 위해 Fragment에서 DialogFragment를 표시하는 방법을 궁금해하십니까?

이것은 나를 위해 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)); 
} 

}

답변

0

나는 FragmentActivity에 상속 관계를 변경, 코드를 사용하는 예제를 개발하고 잘 작동합니다. 이 시도 :

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

사용되는 레이아웃 :

<?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

훌륭한 작품입니다. 고마워. – mgnusl

+0

@mgnusl 오신 것을 환영합니다! 당신을 기쁘게 생각합니다. – mari

1

귀하의 코드가 작동 코드입니다, 에 오류가 방법을 보여주지. 올바른 라이브러리를 가져올 지 확인하십시오 (예 : 지원 라이브러리를 사용하는 경우 android.support.v4.app. *).

편집 - 전체 소스 코드 :

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 - DatePickerFragment가 호출되는

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

뿐만 아니라 잘 작동하는 것 같다. 감사! – mgnusl

+0

제 대답에 작업 코드를 추가합니다. – viduka