【问题标题】:Show dialogfragment inside a fragment在片段内显示对话框片段
【发布时间】:2016-09-09 18:18:56
【问题描述】:

我想显示一个在片段中实现 datepickerdialog 的对话框片段! 我有一个按钮,其侦听器显示 datepickerdialog。 按钮在片段布局中定义为:

<Button
        android:id="@+id/buttonSelectDate"
        android:layout_width="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_height="wrap_content"
    android:onClick="showDatePickerDialog" />

片段类的代码如下(我的问题在showDatePickerDialog函数):

public  class SchedulerChooserFragment extends Fragment {

    private int year;
    private int month;
    private int day;

    TextView dateText;   
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        LayoutInflater lf = getActivity().getLayoutInflater(); 
        rootView = lf.inflate(R.layout.fragment_scheduler_chooser, container,false);

        return rootView;
    }



    // display current date
    public void showCurrentDateOnView() {

        dateText = (TextView) rootView.findViewById (R.id.textDate);

        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);

        System.out.println("year" + year);
        // set current date into textview
        dateText.setText(month + 1 +"-"+day+"-"+year);

        // set current date into datepicker


    }

    public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment(dateText);
        newFragment.show(getSupportFragmentManager(), "datePicker");            
    }

}

但是,getSupportFragmentManager 不存在于片段中。 我试过 getActivity().getSupportFragmentManager 但应用程序崩溃了。 另外,我试过getChildFragmentManager,应用也崩溃了。

datePickerFragment 类如下:

import java.util.Calendar;

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.TextView;

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    TextView txtDate;


     public DatePickerFragment(TextView txtDate) {
        super();
        this.txtDate = txtDate;
    }

    @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);

            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        public void onDateSet(DatePicker view, int year, int month, int day) {
            /*txtDate.setText(year+" " +month +" "+ date);*/
        }



}

我是安卓新手!抱歉,如果我的问题很明显。

谢谢

【问题讨论】:

    标签: android android-activity android-fragments android-dialogfragment


    【解决方案1】:

    在您的 SchedulerChooserFragment 导入片段和 FragmentManager 必须都来自 android.support.v4.app

    所以,

    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    

    【讨论】:

    • 我有你所说的导入,但应用程序仍然崩溃!!!即使我使用 getChildFragmentManager DialogFragment newFragment = new DatePickerFragment(dateText); newFragment.show(getChildFragmentManager(), "datePicker");在fragment下显示dialogFragment是否可行?
    【解决方案2】:
    DialogFragment newFragment = new DatePickerFragment(dateText);
    

    dateText 是 TextView - 您不能将 TextView 设置为 Dialog ;)

    编辑:显示您的错误日志;)

    【讨论】:

    • 我已将 DatePickerFragment 类添加到我的初始帖子中。我有一个构造函数 DatePickerFragment(TextView textDate)。因此,我猜 new DatePIckerFragment(dateText) 不是问题!
    【解决方案3】:

    我发现了错误。 日志输出抛出 java.lang.IllegalStateException: about not found the showDatePickerDialog which is defined as android:onClick="showTimePickerDialog" 一个按钮。

    但是,不能在片段中定义这样的 onclick 方法。 所以我将 SchedulerChooserFragment 更改为:

    public  class SchedulerChooserFragment extends Fragment   implements OnClickListener{
    
            View rootView;
            TextView textDisplayDate;
            private int year;
            private int month;
            private int day;
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                rootView = inflater.inflate(R.layout.fragment_scheduler_chooser, container,false);
                showCurrentDateOnView();
                Button b = (Button) rootView.findViewById(R.id.buttonSelectDate);
                b.setOnClickListener(this);
                return rootView;
            }
    
         // display current date
                public void showCurrentDateOnView() {
    
                    textDisplayDate = (TextView) rootView.findViewById(R.id.textDate);
    
    
                    final Calendar c = Calendar.getInstance();
                    year = c.get(Calendar.YEAR);
                    month = c.get(Calendar.MONTH);
                    day = c.get(Calendar.DAY_OF_MONTH);
    
                    // set current date into textview
                    textDisplayDate.setText(year+" "+month+" "+day);
    
    
                }
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    switch (v.getId()) {
                    case R.id.buttonSelectDate:
    
                         DialogFragment newFragment = new DatePickerFragment(textDisplayDate);
                        newFragment.show(getChildFragmentManager(), "datePicker");
    
                        break;
                    }
    
                }
    
    
        }
    

    【讨论】:

      【解决方案4】:
      DialogFragment dFragment = new DatePickerFragment();
                      dFragment.show(getFragmentManager(), "Date Picker");
      

      Fragment 内的Dialog Fragment

      使用这个

      导入android.support.v4.app.DialogFragment;

      代替

      android.app.DialogFragment;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        相关资源
        最近更新 更多