启动timepicker扩展片段活动设置edittext的值

时间:2013-12-26 11:24:42

标签: java android android-fragments datepicker

我正在尝试启动timepicker扩展FragmentActivity

  • 我可以使用Date picker here
  • 发布FragmentActivity
  • 但我无法使用time picker
  • fragment activity执行相同的操作
  • 我想为timepicker启用et1& et2

BuffetOfferings_MainFragmentActivity.java

public class BuffetOfferings_MainFragmentActivity extends FragmentActivity{

    static final int TIME_DIALOG_ID = 1111;

    private int hour;
    private int minute;


    Button back_button;

    EditText et1;
    EditText et2;

    FragmentManager manager;
    FragmentTransaction transaction;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.buffet_offerings_fragment_main_reference);

        et1=(EditText) findViewById(R.id.from_lunch_edit_text_id);
        et2=(EditText) findViewById(R.id.to_lunch_edit_text_id);

        Buffet_offerings_breakfast_menu1 breakfast_fragment=new Buffet_offerings_breakfast_menu1();


        manager=getSupportFragmentManager();
        transaction=manager.beginTransaction();

        transaction.add(R.id.BREAKFAST_LAYOUT_ID,breakfast_fragment, "breakfast_menu1_fragment");


        transaction.commit();



        /********* display current time on screen Start ********/

        final Calendar c = Calendar.getInstance();
        // Current Hour
        hour = c.get(Calendar.HOUR_OF_DAY);
        // Current Minute
        minute = c.get(Calendar.MINUTE);

        // set current time into output textview
        updateTime(hour, minute);

        /********* display current time on screen End ********/

        // Add Button Click Listener
        addButtonClickListener();


    }



    public void addButtonClickListener() {



        et1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                showDialog(TIME_DIALOG_ID);

            }

        });

    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_ID:

            // set time picker as current time
            return new TimePickerDialog(this, timePickerListener, hour, minute,
                    false);

        }
        return null;
    }

    private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {


        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
            // TODO Auto-generated method stub
            hour   = hourOfDay;
            minute = minutes;

            updateTime(hour,minute);

        }

    };

    private static String utilTime(int value) {

        if (value < 10)
            return "0" + String.valueOf(value);
        else
            return String.valueOf(value);
    }

    // Used to convert 24hr format to 12hr format with AM/PM values
    private void updateTime(int hours, int mins) {

        String timeSet = "";
        if (hours > 12) {
            hours -= 12;
            timeSet = "PM";
        } else if (hours == 0) {
            hours += 12;
            timeSet = "AM";
        } else if (hours == 12)
            timeSet = "PM";
        else
            timeSet = "AM";


        String minutes = "";
        if (mins < 10)
            minutes = "0" + mins;
        else
            minutes = String.valueOf(mins);

        // Append in a StringBuilder
        String aTime = new StringBuilder().append(hours).append(':')
                .append(minutes).append(" ").append(timeSet).toString();

        et1.setText(aTime);
    }






    public void BreakfastRedMenu1(View V){

        Buffet_offerings_breakfast_menu2  breakfast_fragment1=new Buffet_offerings_breakfast_menu2();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.BREAKFAST_LAYOUT_ID, breakfast_fragment1, "Tag1");
        transaction.commit();

    }



    public void BreakfastGreenMenu2(View V){

        Buffet_offerings_breakfast_menu1  breakfast_fragment2=new Buffet_offerings_breakfast_menu1();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.BREAKFAST_LAYOUT_ID, breakfast_fragment2, "Tag4");
        transaction.commit();

    }   





}

当我从之前的活动导航到我的datepicker存在的当前活动时,记录:: ....我得到以下日志

12-26 16:53:52.689: E/AndroidRuntime(1289): FATAL EXCEPTION: main
12-26 16:53:52.689: E/AndroidRuntime(1289): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidbegin.jsonparsetutorial/com.project.findmybuffet.BuffetOfferings_MainFragmentActivity}: java.lang.NullPointerException
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.os.Looper.loop(Looper.java:123)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at java.lang.reflect.Method.invokeNative(Native Method)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at java.lang.reflect.Method.invoke(Method.java:521)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at dalvik.system.NativeStart.main(Native Method)
12-26 16:53:52.689: E/AndroidRuntime(1289): Caused by: java.lang.NullPointerException
12-26 16:53:52.689: E/AndroidRuntime(1289):     at com.project.findmybuffet.BuffetOfferings_MainFragmentActivity.updateTime(BuffetOfferings_MainFragmentActivity.java:158)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at com.project.findmybuffet.BuffetOfferings_MainFragmentActivity.onCreate(BuffetOfferings_MainFragmentActivity.java:67)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-26 16:53:52.689: E/AndroidRuntime(1289):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-26 16:53:52.689: E/AndroidRuntime(1289):     ... 11 more

{编辑}

BuffetOfferings_MainFragmentActivity.java

public class BuffetOfferings_MainFragmentActivity extends FragmentActivity{

    Button back_button;

    FragmentManager manager;
    FragmentTransaction transaction;

    EditText ed1,ed2;
    boolean flag =false;
    TimePickerFragment newFragment;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.buffet_offerings_fragment_main_reference);

        ed1 = (EditText) findViewById(R.id.from_lunch_edit_text_id);
        ed2 = (EditText) findViewById(R.id.to_lunch_edit_text_id);

        Buffet_offerings_breakfast_menu1 breakfast_fragment=new Buffet_offerings_breakfast_menu1();
        Buffet_offerings_lunch_menu1 lunch_fragment=new Buffet_offerings_lunch_menu1();
        Buffet_offerings_dinner_menu1 dinner_fragment=new Buffet_offerings_dinner_menu1();

        manager=getSupportFragmentManager();
        transaction=manager.beginTransaction();

        transaction.add(R.id.BREAKFAST_LAYOUT_ID,breakfast_fragment, "breakfast_menu1_fragment");
        transaction.add(R.id.LUNCH_LAYOUT_ID,lunch_fragment, "lunch_menu1_fragment");
        transaction.add(R.id.DINNER_LAYOUT_ID,dinner_fragment, "dinner_menu1_fragment");

        transaction.commit();



        newFragment = new TimePickerFragment();
        ed1.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v) {
                flag=false;
                newFragment.show(getSupportFragmentManager(), "timePicker");
            }

        });
        ed2.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v) {
                flag=true;
                newFragment.show(getSupportFragmentManager(), "timePicker");
            }

        });


        back_button=(Button) findViewById(R.id.TopNavigationBarRestaurantBuffetOfferingsBackButton);
        back_button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();

            }
        });


    }


    public void returnTime(String value) {
        // TODO Auto-generated method stub
        if(flag==false)
        ed1.setText(value);
        else if(flag==true)
        ed2.setText(value);

    }



    public void BreakfastRedMenu1(View V){

        Buffet_offerings_breakfast_menu2  breakfast_fragment1=new Buffet_offerings_breakfast_menu2();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.BREAKFAST_LAYOUT_ID, breakfast_fragment1, "Tag1");
        transaction.commit();

    }

    public void LunchRedMenu1(View V){

        Buffet_offerings_lunch_menu2  lunch_fragment1=new Buffet_offerings_lunch_menu2();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.LUNCH_LAYOUT_ID, lunch_fragment1, "Tag2");
        transaction.commit();

    }

    public void DinnerRedMenu1(View V){

        Buffet_offerings_dinner_menu2  dinner_fragment1=new Buffet_offerings_dinner_menu2();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.DINNER_LAYOUT_ID, dinner_fragment1, "Tag3");
        transaction.commit();

    }


    public void BreakfastGreenMenu2(View V){

        Buffet_offerings_breakfast_menu1  breakfast_fragment2=new Buffet_offerings_breakfast_menu1();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.BREAKFAST_LAYOUT_ID, breakfast_fragment2, "Tag4");
        transaction.commit();

    }   

    public void LunchGreenMenu2(View V){

        Buffet_offerings_lunch_menu1  lunch_fragment2=new Buffet_offerings_lunch_menu1();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.LUNCH_LAYOUT_ID, lunch_fragment2, "Tag5");
        transaction.commit();

    }

    public void DinnerGreenMenu2(View V){

        Buffet_offerings_dinner_menu1  dinner_fragment2=new Buffet_offerings_dinner_menu1();
        transaction=manager.beginTransaction();
        transaction.replace(R.id.DINNER_LAYOUT_ID, dinner_fragment2, "Tag6");
        transaction.commit();

    }


}

TimePickerFragment.java

public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
    public interface PickTime
    {
        public void returnTime(String value);

    }

    PickTime mCallback;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker
        mCallback = (PickTime) getActivity();
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user

        if(mCallback!=null)
        {
            StringBuilder sb = new StringBuilder();
            sb.append(hourOfDay);
            sb.append(":");
            sb.append(minute);
            mCallback.returnTime(sb.toString());
        }
    }
}

LOG ::

12-26 17:18:09.800: E/AndroidRuntime(1376): FATAL EXCEPTION: main
12-26 17:18:09.800: E/AndroidRuntime(1376): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidbegin.jsonparsetutorial/com.project.findmybuffet.BuffetOfferings_MainFragmentActivity}: java.lang.NullPointerException
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.os.Looper.loop(Looper.java:123)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at java.lang.reflect.Method.invokeNative(Native Method)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at java.lang.reflect.Method.invoke(Method.java:521)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at dalvik.system.NativeStart.main(Native Method)
12-26 17:18:09.800: E/AndroidRuntime(1376): Caused by: java.lang.NullPointerException
12-26 17:18:09.800: E/AndroidRuntime(1376):     at com.project.findmybuffet.BuffetOfferings_MainFragmentActivity.onCreate(BuffetOfferings_MainFragmentActivity.java:53)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-26 17:18:09.800: E/AndroidRuntime(1376):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-26 17:18:09.800: E/AndroidRuntime(1376):     ... 11 more

1 个答案:

答案 0 :(得分:1)

使用DailogFragment

我使用了一个接口作为活动的回调,并将文本设置为edittext

参考:

http://developer.android.com/guide/topics/ui/controls/pickers.html

TimerPickerFragment

public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
    public interface PickTime
    {
        public void returnTime(String value);

    }

    PickTime mCallback;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
    mCallback = (PickTime) getActivity();
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);

// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user

    if(mCallback!=null)
    {
        StringBuilder sb = new StringBuilder();
        sb.append(hourOfDay);
        sb.append(":");
        sb.append(minute);
        mCallback.returnTime(sb.toString());
    }
}
}

MainActivity.java

   public class MainActivity extends FragmentActivity implements PickTime{

        EditText ed1,ed2;
        boolean flag =false;
        TimePickerFragment newFragment;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ed1 = (EditText) findViewById(R.id.editText1);
            ed2 = (EditText) findViewById(R.id.editText2);
            newFragment = new TimePickerFragment();
            ed1.setOnFocusChangeListener(new OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if(hasFocus){
                      flag =false;
                      newFragment.show(getSupportFragmentManager(), "timePicker");
                    }
                   }
                });
            ed2.setOnFocusChangeListener(new OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if(hasFocus){
                      flag =true;
                      newFragment.show(getSupportFragmentManager(), "timePicker");
                    }
                   }
                });

        }
        @Override
        public void returnTime(String value) {
            // TODO Auto-generated method stub
            if(flag==false)
            ed1.setText(value);
            else if(flag==true)
            ed2.setText(value);

        }

}